微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 计算数据帧中特定列的成对差异

我有以下数据框,其中显示了我从Item1到Item 2的移动次数.例如,从A到B有一个过渡,从A到C有1个过渡,从C到A有1个过渡

    Item1   Item2   Moves
  1  A       B       1
  2  A       C       2
  3  B       D       3
  4  C       A       1
  5  C       B       5
  6  D       B       4
  7  D       C       1

我想计算两个项目之间的差异,因此新构建的Dataframe将如下所示

    Item1   Item2   Moves
  1  A       B       1
  2  A       C       1
  3  B       D      -1
  4  C       B       5
  5  D       C       1

有没有人知道如何使用熊猫做到这一点?我想我需要在前两列上编制索引,但我在Pandas中很新,我面临很多困难.
谢谢

编辑
没有任何重复的对.例如你不能看到两次a-> b(但你当然可以看到b-> a)

解决方法:

我敢肯定有人可以将这种情况简化为更少的行,但我已经离开了很长时间以帮助澄清发生了什么.简而言之,根据“Item1”在字母表中是否早于“Item2”,将数据帧拆分为两部分.然后翻转’Item1’和’Item2’并否定’Moves’为一件.将它们粘合在一起并使用groupby函数聚合行.

>>> df
  Item1 Item2  Moves
0     A     B      1
1     A     C      2
2     B     D      3
3     C     A      1
4     C     B      5
5     D     B      4
6     D     C      1
>>> swapidx = df['Item1'] < df['Item2']
>>> df1 = df[swapidx]
>>> df2 = df[swapidx^True]
>>> df1
  Item1 Item2  Moves
0     A     B      1
1     A     C      2
2     B     D      3
>>> df2
  Item1 Item2  Moves
3     C     A      1
4     C     B      5
5     D     B      4
6     D     C      1
>>> df2[['Item1', 'Item2']] = df2[['Item2', 'Item1']]
>>> df2['Moves'] = df2['Moves']*-1
>>> df2
  Item1 Item2  Moves
3     A     C     -1
4     B     C     -5
5     B     D     -4
6     C     D     -1
>>> df3 = df1.append(df2)
>>> df3.groupby(['Item1', 'Item2'], as_index=False).sum()
  Item1 Item2  Moves
0     A     B      1
1     A     C      1
2     B     C     -5
3     B     D     -1
4     C     D     -1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐