Pandas迭代创建批次列:当Diff超过指定阈值时自动递增标识
解决方案
核心逻辑使用Pandas的cumsum()累加函数即可实现,无需拆分表格再拼接,完整可运行代码如下:
import pandas as pd # 模拟你的样例数据,实际使用时直接读取你的表格即可 data = { 'Datetime': ['2021-01-01 12:00:00', '2021-01-01 12:02:00', '2021-01-01 12:04:00', '2021-01-01 12:10:00', '2021-01-01 12:20:00', '2021-01-01 12:22:00'], 'Diff': [0,2,2,6,10,2] } df = pd.DataFrame(data) df['Datetime'] = pd.to_datetime(df['Datetime']) # 核心实现代码 threshold = 7 # 可根据需求自定义阈值 df['Batch'] = (df['Diff'] > threshold).cumsum() + 1 # +1是让批次从1开始计数,不需要可直接删除
运行后输出结果如下:
| Datetime | Diff | Batch |
|---|---|---|
| 2021-01-01 12:00:00 | 0 | 1 |
| 2021-01-01 12:02:00 | 2 | 1 |
| 2021-01-01 12:04:00 | 2 | 1 |
| 2021-01-01 12:10:00 | 6 | 1 |
| 2021-01-01 12:20:00 | 10 | 2 |
| 2021-01-01 12:22:00 | 2 | 2 |
实现原理
df['Diff'] > threshold会生成布尔序列,超过阈值的行返回True(对应数值为1),其余行返回False(对应数值为0)cumsum()会逐行累加该序列的数值,每遇到一次超过阈值的行,累加值就加1,刚好实现批次号自动递增的效果
如果需要转换成A/B/C的字母批次标识,可新增一步映射逻辑:
import string # 最多支持26个批次,批次数量更多可自行扩展映射规则 batch_map = {i+1: string.ascii_uppercase[i] for i in range(26)} df['Batch'] = df['Batch'].map(batch_map)
内容的提问来源于stack exchange,提问作者withayk
相关产品推荐
相关产品推荐

