Big*_*tch 5 python indexing dataframe pandas
我有以下数据框,其中显示了我从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
Run Code Online (Sandbox Code Playgroud)
我想计算两个项目之间的差异,因此新构建的Dataframe将如下所示
Item1 Item2 Moves
1 A B 1
2 A C 1
3 B D -1
4 C B 5
5 D C 1
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何使用熊猫做到这一点?我想我需要在前两列上编制索引,但我在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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1570 次 |
最近记录: |