我有以下数据
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)]。
答案 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()