[英]Pandas groupby data and do calculation
我有一个如下所示的数据帧,我根据列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。 如果我们需要,我们仍然可以做到这一点。
你可以这样做:
df.groupby(level="A").B.diff().fillna(0)
A
a 0
b 0
c 0
d 0
d 1
d 1
d 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.