Python 按数据分组并进行计算
我有一个如下所示的数据框,我根据B列的值对数据框重新排序Python 按数据分组并进行计算,python,python-2.7,pandas,Python,Python 2.7,Pandas,我有一个如下所示的数据框,我根据B列的值对数据框重新排序 a=df.sort(['B','a'],升序=[True,False]) 然后,当A列相同时,我想计算B列中每个元素之间的差值。但如果列A仅包含单个数据点,则结果将为零 因此,首先我使用了groupby()来实现这一点 b=a['b'].groupby(df['a']) 然后我卡在这里,我知道我可以使用lambda x:abs(x[I]-x[I+1])甚至apply()函数来完成计算。但我还是没能完成 有人能给我一个提示或建议吗 # Wh
a=df.sort(['B','a'],升序=[True,False])
然后,当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
在单成员组和多成员组情况下,采用
diff
将为第一个值生成一个nan,我们可以fillna
使用0:
>>> 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
“5减5”位是一种需要处理的特殊情况,你真的需要它吗?谢谢你的回答,如果数据是第一个(最小的)数据,我只想保持它为零,就像单个数据点一样。好吧,如果你有一个很好的理由,我不会反驳你比我快!
df.groupby(level="A").B.diff().fillna(0)
A
a 0
b 0
c 0
d 0
d 1
d 1
d 2