查找数据框的两列之间以及groupby之间的差异

时间:2020-08-13 20:14:23

标签: python pandas

我看到了这个问题的原始版本here

但是我的数据框名称不同,我想分别为它们计算

   A   B   C
0  a   3   5
1  a   6   9
2  b   3   8
3  b  11  19

我想对A进行分组,然后找到备用B和C之间的差异。

   A   B   C   dA
0  a   3   5   6
1  a   6   9  NaN
2  b   3   8  16
3  b  11  19  NaN

我尝试做

df['dA']=df.groupby('A')(['C']-['B'])
df['dA']=df.groupby('A')['C']-df.groupby('A')['B']

他们都没有帮助 我在犯什么错误?

1 个答案:

答案 0 :(得分:0)

IIUC,这是执行计算的一种方法:

# create the data frame
from io import StringIO
import pandas as pd

data = '''idx    A   B   C
0  a   3   5
1  a   6   9
2  b   3   8
3  b  11  19
'''

df = pd.read_csv(StringIO(data), sep='\s+', engine='python').set_index('idx')

现在,计算dA。我查看了C的最后一个值减去B的第一个值(按A分组)(是对吗?还是max(C)减去min(B)?)。如果可以确保A值成对出现,那么@BenT的shift()会更简洁。

dA = (
    (df.groupby('A')['C'].transform('last') - 
     df.groupby('A')['B'].transform('first'))
       .drop_duplicates()
       .rename('dA'))

print(pd.concat([df, dA], axis=1))

     A   B   C    dA
idx                 
0    a   3   5   6.0
1    a   6   9   NaN
2    b   3   8  16.0
3    b  11  19   NaN

我使用groupby().transform()来保留索引值,以支持concat操作。