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

如何用pd.merge()处理DataFrame列表列与CSV的匹配及均值聚合?

解决方案:用Pandas内置方法即可实现,无需循环

完全不需要用循环或列表推导式,借助Pandas的explode()和merge()组合就能高效完成需求,核心思路是先把含列表的列展开为多行,再完成匹配与聚合。

具体步骤与代码示例

假设我们有如下初始数据:

  • 原DataFrame df,包含polName列(值为单个或多个元素的列表)
  • CSV文件读取后的csv_df,包含name(单个值)和j列
import pandas as pd

# 示例原DataFrame
df = pd.DataFrame({
    'row_id': [1, 2, 3],
    'polName': [['X', 'Y'], ['Z'], ['X', 'Z']]
})

# 读取CSV文件
csv_df = pd.read_csv('your_data.csv')  # 结构示例:name | j
  1. 展开列表列:将polName中的每个元素单独拆分为一行,保留原行的标识(比如row_id)
exploded_df = df.explode('polName')
  1. 匹配合并:用merge()按polName和name完成匹配
merged_df = exploded_df.merge(csv_df, left_on='polName', right_on='name', how='left')
  1. 聚合均值:按原行的标识分组,计算j列的均值
mean_result = merged_df.groupby('row_id')['j'].mean().reset_index()
  1. 合并回原结构(可选):如果需要将结果和原DataFrame关联
final_df = df.merge(mean_result, on='row_id')

为什么不用循环?

explode()是Pandas专门处理列表型列的内置方法,配合merge()和groupby()的向量化操作,比循环效率高得多,尤其是数据量较大时优势明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:22:02