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

如何在Pandas中批量设置df1列取first、df2列取join的agg聚合?

动态指定分组聚合规则的实现方案

问题背景

现有两个DataFrame:

import pandas as pd

df1 = pd.DataFrame({'List' : ['P111', 'P999', 'P111;P999;P777', 'P555', 'P666;P111;P333'],
                    'Color' : ['red', 'red', 'blue','yellow', 'red']})

df2 = pd.DataFrame({'Cod' : ['P111', 'P222', 'P333', 'P444', 'P555', 'P666', 'P777'],
                    'Animal' : ['DOG', 'CAT', 'BUG','SNAKE,DOG', 'CAT,BUG', 'DOG', 'SNAKE'],
                    'Letter' : ['A,F', 'C', 'S,M', 'F,L', 'C,A','M,C', 'Z,L']})

当前采用手动指定列的方式执行分组聚合:

...
.groupby('index')
.agg(List=('List','first'),
     Sequence=('Sequence','first'),
     Animal=('Animal','|'.join),
     Letter=('Letter','|'.join))
...

但由于df1、df2的列数量不固定,且部分列名包含空格,无法手动逐个指定聚合方式,需要实现自动对df1所有列应用first聚合,对df2所有列应用'|'.join聚合的逻辑。

解决方案

通过字典推导式分别为两个DataFrame生成对应聚合规则,再合并规则字典后传入agg()方法即可实现动态指定:

# 为df1生成聚合规则:所有列使用'first'
agg_rules_df1 = {col: 'first' for col in df1.columns}
# 为df2生成聚合规则:所有列使用'|'.join
agg_rules_df2 = {col: '|'.join for col in df2.columns}
# 合并两个规则字典
total_agg_rules = {**agg_rules_df1, **agg_rules_df2}

# 执行分组聚合(假设已完成df1与df2的合并,得到包含index列的merged_df)
final_result = merged_df.groupby('index').agg(total_agg_rules)

说明

  • 字典推导式会自动遍历DataFrame的所有列,不管列名是否包含空格、列数量多少,都能生成对应的聚合规则
  • 合并字典时,如果df1和df2存在同名列,df2的规则会覆盖df1的(可根据实际需求调整合并顺序)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 10:01:59