Pandas groupby数据并做计算

时间:2016-02-25 14:11:51

标签: python python-2.7 pandas

我的数据框如下所示,我根据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

2 个答案:

答案 0 :(得分:3)

在1成员和多成员组案例中,取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存在。如果我们需要,我们仍然可以做到这一点。

答案 1 :(得分:3)

你可以这样做:

df.groupby(level="A").B.diff().fillna(0)

A
a    0
b    0
c    0
d    0
d    1
d    1
d    2