【发布时间】:2020-12-03 17:47:53
【问题描述】:
我看到了这个问题的原始版本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']
他们都没有帮助 我犯了什么错误?
【问题讨论】:
-
在您的示例中,dA 的值是如何计算的? 6 和 16 是从哪里来的?
-
9 来自 C - 3 来自 B 为 a ,类似地 19 来自 C - 3 来自 B 为 b
-
如果我只做 df['dA']=df['C']-df['B'],它可以工作,但 dA 也包含 2(6 到 16 之间),它是使用计算的一个来自 a 的数据和一个来自 b 的数据。我不想要,所以我想将它与 groupby 一起使用
-
您在寻找
df.groupby('A').apply(lambda x: x['C'].shift(-1) - x['B'])吗? -
是的,谢谢@Ben.T