如何按id分组数据并找出相邻数据的差异?

时间:2017-04-27 15:01:11

标签: python pandas math dataframe

我有以下数据

df['id'] = ['A','B','A','A','B', 'B']
df['starting_point'] =['2525','5656','1234','4562','6496','1122']
df['ending_point'] = ['6565','8989','5656','6245','9999','9999']

对于上述数据:

$.ajax

我想用他们的id(即A,B,...)编写一个python代码组,并找出A的第一个和第二个结束点之和与第二个和第三个结束点的总和之间的差异。 A.在这种情况下[(6565 + 5656) - (5656 + 6245)]。

3 个答案:

答案 0 :(得分:2)

IIUC你可以点击第二个结束点,(6565+5656) - (5656+6245) == 6565 - 6245

In [15]: df.groupby('id')['ending_point'].apply(lambda x: x - x.shift(-2))
Out[15]:
0     320.0
1    6778.0
2       NaN
3       NaN
4       NaN
5       NaN
Name: ending_point, dtype: float64

答案 1 :(得分:1)

您可以groupby使用自定义函数,按iloc选择并获得总和的差异:

df = df.groupby('id')['ending_point'] \
       .apply(lambda x: x.iloc[:2].sum() - x.iloc[1:4].sum()).reset_index()
print (df)
  id  ending_point
0  A           320
1  B          6778

答案 2 :(得分:0)

另一种可能的解决方案:

group = df.groupby('id')
group['ending_point'].first() - group['ending_point'].last()