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

Python pandas如何循环遍历Counter字段生成子集DataFrame并合并

自动遍历Counter字段生成子集并合并的实现方案

不需要手动逐一定义每个Counter值对应的子集,通过遍历Counter列的唯一取值即可自动适配任意数量的Counter枚举值,实现逻辑和手动编写的小规模示例完全对齐。

完整实现代码

import pandas as pd
from functools import reduce

# 原始数据集
data = {'name': ['Adam','Adam','Adam','Adam', 'nick','nick','nick','nick','nick','krish','krish','krish',],
        'age': [20,20,20,20, 21,21,21,21,21, 19,19,19],
        'Product': ['A','B','C','D','A','B','C','D','E','A','B','C'],
        'Counter': [1,2,3,4,1,2,3,4,5,1,2,3]}
df = pd.DataFrame(data)

# 自动生成所有Counter值对应的子集列表
dfs = []
# 遍历Counter列去重后的排序值,保证子集顺序和手动实现一致
for counter_val in sorted(df['Counter'].unique()):
    # 筛选当前Counter值的行,保留需要的字段
    sub_df = df.loc[df['Counter'] == counter_val, ['name','age','Product']]
    # 为非关联列加对应Counter后缀,避免合并后列名重复
    sub_df = sub_df.rename(columns={
        'age': f'age_Counter{counter_val}',
        'Product': f'Product_Counter{counter_val}'
    })
    dfs.append(sub_df)

# 按name字段外连接合并所有子集,逻辑和手动实现完全一致
df_merged = reduce(lambda left,right: pd.merge(left, right, on=['name'], how='outer'), dfs)

逻辑说明

  • 自动适配Counter取值:通过df['Counter'].unique()获取Counter列所有不重复的取值,搭配sorted()保证取值按升序排列,哪怕Counter有数百个取值也不需要手动修改代码。
  • 避免冗余变量定义:循环过程中自动完成子集筛选、字段裁剪,不需要逐一定义df1/df2这类零散变量。
  • 修复原手动实现的隐患:原手动代码未处理列名重复问题,合并后会存在多列同名的age、Product字段,无法区分对应哪个Counter值,上述代码通过重命名字段解决了这个问题。如果需要完全保留原手动实现的列名效果,删除rename相关代码即可。
  • 合并规则完全对齐:沿用原本使用的reduce+外连接逻辑,以name作为关联键,合并结果和手动拼接的结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:21:12