我有一个如下所示的数据框,我已根据 B 列的值对数据框重新排序。
a = df.sort(['B', 'A'], ascending=[True, False])
#This is my df
A,B
a,2
b,3
c,4
d,5
d,6
d,7
d,9
然后当A列相同时,我想计算B列中每个元素之间的差异。但如果 A 列仅包含单个数据点,则结果将为零。
所以首先我使用 groupby()
来这样做。
b = a['B'].groupby(df['A']))
然后我卡在这里,我知道我可以使用 lambda x: abs(x[i] - x[i+1])
甚至 apply()
函数来完成计算。但我还是没能完成。
谁能给我提示或建议?
# What I want to see in the result
A,B
a,0
b,0
c,0
d,0 # 5 minus 5
d,1 # 6 minus 5
d,1 # 7 minus 6
d,2 # 9 minus 7
最佳答案
在 1 成员和多成员组的情况下,采用 diff
将为第一个值生成一个 nan,我们可以用 0 fillna
:
>>> df["B"] = df.groupby("A")["B"].diff().fillna(0)
>>> df
A B
0 a 0
1 b 0
2 c 0
3 d 0
4 d 1
5 d 1
6 d 2
这假设您要保留的地方已经没有 NaN。如果需要,我们仍然可以完成这项工作。
关于python - Pandas groupby 数据并进行计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629694/