在数据框熊猫中使用groupby和自定义agg

时间:2020-10-13 08:48:25

标签: python pandas dataframe pandas-groupby

我有这个数据框:

id start end
1  1     2
1  13    27
1  30    35
1  36    40
2  2     5
2  8     10
2  25    30

例如,我想对ID行进行分组并汇总n-1行的end与n行的start之差小于10的行。我已经找到了使用循环的方法,但是它过长,超过一百万行。

所以预期结果将是:

id start end
1  1     2
1  13    40
2  2     10
2  25    30

首先,我可以使用df['diff']=df['start'].shift(-1)-df['end']获得所需的差异。如何根据每个不同ID的条件收集ID?

谢谢!

1 个答案:

答案 0 :(得分:1)

我相信您可以通过将end10乘以g = df['start'].sub(df.groupby('id')['end'].shift()).gt(10).cumsum() df = (df.groupby(['id',g]) .agg({'start':'first', 'end': 'last'}) .reset_index(level=1, drop=True) .reset_index()) print (df) id start end 0 1 1 2 1 1 13 40 2 2 2 10 3 2 25 30 并乘以DataFrameGroupBy.shift并乘以GroupBy.agg来创建分组。

<runtime>
    <os>linux</os>
    <javaVersion>11</javaVersion>
</runtime>