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

如何将DataFrame按id拆分并按对应属性生成子DataFrame存储匹配id

实现方法

你不需要逐个拆分id再处理,直接按id生成属性集合的唯一标识后分组即可,全程用pandas内置操作就能完成,效率比手动拆分高很多。

核心步骤:

  1. 给每个id生成属性集合签名:把同一个id对应的所有属性(也就是x列的取值)去重后拼接为唯一字符串,相同属性集合的id会得到完全相同的签名
  2. 按生成的签名分组,每个分组就是你需要的、包含所有同属性集合id的子DataFrame

代码示例:

import pandas as pd

# 构造示例数据
data = {
    'x': ['A','B','C','D','E','A','D','E','F','Z'],
    'value': ['5','DE','False','yes','-0.9442','66','yes','-0.9442','Kuku','1'],
    'id': [1,1,1,1,1,2,2,2,2,2]
}
df = pd.DataFrame(data)

# 生成属性签名,sorted保证属性顺序不影响签名结果(如果要保留原始出现顺序可以删掉sorted)
df['attr_sign'] = df.groupby('id')['x'].transform(lambda ser: '|'.join(sorted(ser.unique())))

# 按签名分组,得到所有子DataFrame,存在字典里方便调用
grouped_dfs = {sign: group.drop('attr_sign', axis=1) for sign, group in df.groupby('attr_sign')}

# 测试打印结果
for sign, sub_df in grouped_dfs.items():
    print(f"属性集合为 {sign.replace('|', ',')} 的子DataFrame:")
    print(sub_df)
    print('-'*30)

运行结果说明:

示例数据会生成两个子DataFrame,分别对应属性集合A,B,C,D,E(包含id=1的所有行)和A,D,E,F,Z(包含id=2的所有行),符合你的需求。如果后续有其他id的属性和其中某一个一致,会自动归到对应分组里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:36:05