如何用Pandas按时间相对差小于20分组计算Value列的求和?
如何用Pandas按「相邻时间差小于20」分组求和
没问题,这个需求核心是先确定分组的边界,咱们一步步来实现:
首先,先把你给的数据集构造成Pandas的DataFrame:
import pandas as pd data = { 'time': [1, 2, 20, 50, 55, 74, 100, 105, 120], 'value': [4, 5, 7, 8, 10, 12, 1, 21, 0] } df = pd.DataFrame(data)
接下来是关键步骤:生成分组标签。我们需要判断相邻行的time差值是否≥20,如果是,就开启一个新组:
- 用
diff()计算相邻time的差值,第一行因为没有上一行,结果是NaN - 把差值≥20的标记为1,其他情况标记为0,第一行填充0(属于第一个组)
- 对这些标记做累加(
cumsum()),就能得到每个行对应的分组ID
代码如下:
# 计算相邻时间差 time_diff = df['time'].diff() # 生成分组标记:差值≥20时为1,否则为0,第一行填充0 group_flag = (time_diff >= 20).astype(int).fillna(0) # 累加得到分组ID df['group_id'] = group_flag.cumsum()
此时你的DataFrame会多一列group_id,对应每个元素的分组:
| time | value | group_id |
|---|---|---|
| 1 | 4 | 0 |
| 2 | 5 | 0 |
| 20 | 7 | 0 |
| 50 | 8 | 1 |
| 55 | 10 | 1 |
| 74 | 12 | 1 |
| 100 | 1 | 2 |
| 105 | 21 | 2 |
| 120 | 0 | 2 |
最后一步,按group_id分组对value列求和:
result = df.groupby('group_id')['value'].sum().reset_index()
最终结果如下,完全符合你的分组求和需求:
| group_id | value |
|---|---|
| 0 | 16 |
| 1 | 30 |
| 2 | 22 |
内容的提问来源于stack exchange,提问作者mkmostafa
相关产品推荐
相关产品推荐

