gpt4 book ai didi

python - 计算数据框中特定列的成对差异

转载 作者:太空狗 更新时间:2023-10-30 01:09:15 26 4
gpt4 key购买 nike

我有以下数据框,其中显示了我看到从 Item1 到 Item 2 的移动次数。例如,有一次从 A 到 B 的转换,2 次从 A 到 C ,1 次从 C 到 A


    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 做到这一点?我想我需要在前两列上建立索引,但我对 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

关于python - 计算数据框中特定列的成对差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15005629/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com