You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于pandas DataFrame中特定ID的取值变化拆分对应分段数据集

解决方案

实现思路

  • 先定位数据集中所有ID为B的行,筛选出其中value取值发生变化的行索引,这些位置就是数据集的拆分节点
  • 以拆分节点为边界,依次截取从当前节点到下一个拆分节点前的所有行,即为所需的子数据集

实现代码

import pandas as pd

# 构造输入数据
data = {'ID': ['B', 'A', 'C', 'D', 'B','A','D'],
        'value': ["status 1",125, "status1", 450, "status 2", 20 , 30],
        'timestamp': [1632733508, 1632733508, 1632733511, 1632733512, 1632733513, 1632733515, 1632733518]
        }
df1 = pd.DataFrame(data)

# 获取B的取值发生变化的索引作为拆分点,末尾补数据集长度作为最后一个分片的结束边界
b_rows = df1[df1['ID'] == 'B']
split_points = b_rows.index[b_rows['value'] != b_rows['value'].shift(fill_value=object())].tolist() + [len(df1)]

# 拆分得到子数据集列表
sub_dfs = []
for i in range(len(split_points)-1):
    # 如需重置子数据集的索引为从0开始,可在iloc后加 .reset_index(drop=True)
    sub_df = df1.iloc[split_points[i]:split_points[i+1]]
    sub_dfs.append(sub_df)

# 输出查看结果
for idx, df in enumerate(sub_dfs, 1):
    print(f"第{idx}个子数据集:")
    print(df, '\n')

运行结果

第1个子数据集:
  ID     value   timestamp
0  B  status 1  1632733508
1  A       125  1632733508
2  C  status1  1632733511
3  D       450  1632733512 

第2个子数据集:
  ID     value   timestamp
4  B  status 2  1632733513
5  A        20  1632733515
6  D        30  1632733518 

内容的提问来源于stack exchange,提问作者Horseman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:24:01