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

如何将pandas DataFrame连续同Action值行拆分存入独立DataFrame列表

解决方法

要实现按连续相同的Action列值拆分DataFrame,只需要先构造连续分组标识,再基于该标识分组即可,核心代码如下:

# 生成连续分组标识:连续相同Action的行对应标识值相同
grouper = (df['Action'] != df['Action'].shift()).cumsum()
# 按分组标识拆分,将所有子DataFrame存入列表,reset_index可重置子DF的索引为从0开始,不需要可删除
df_list = [group_df.reset_index(drop=True) for _, group_df in df.groupby(grouper)]

你可以通过print(len(df_list))查看列表长度,示例数据下会返回4,正好对应你需要的4个独立DataFrame,顺序也和连续分组的出现顺序完全一致。


实现原理

  • df['Action'].shift()会将Action列整体向下偏移1行,第一行偏移后为缺失值
  • 用df['Action'] != df['Action'].shift()做不等比较,Action值发生变化的位置会返回布尔值True
  • 用cumsum()对布尔值做累加(True等价于1,False等价于0),最终得到的序列中,连续相同Action的行会对应同一个数值,即连续分组的标识
  • 基于该标识做groupby,就不会把非连续的同Action值行合并,完全符合需求

如果需要测试,可以用如下代码构造你给出的示例DataFrame:

import pandas as pd
data = {
    'Action': ['A0','A0','A0','A1','A1','A0','A0','A2','A2','A2','A2'],
    'X1': [0.1,0.2,0.3,1.0,1.1,0.1,0.2,0.3,0.1,0.2,0.3],
    'X2': [0.4,0.5,0.6,1.2,1.5,0.4,0.5,0.6,0.4,0.5,0.6],
    'X3': [0.7,0.8,0.9,1.3,1.6,0.7,0.8,0.9,0.7,0.8,0.9]
}
df = pd.DataFrame(data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:36:04