如何用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
- 展开列表列:将
polName中的每个元素单独拆分为一行,保留原行的标识(比如row_id)
exploded_df = df.explode('polName')
- 匹配合并:用
merge()按polName和name完成匹配
merged_df = exploded_df.merge(csv_df, left_on='polName', right_on='name', how='left')
- 聚合均值:按原行的标识分组,计算
j列的均值
mean_result = merged_df.groupby('row_id')['j'].mean().reset_index()
- 合并回原结构(可选):如果需要将结果和原DataFrame关联
final_df = df.merge(mean_result, on='row_id')
为什么不用循环?
explode()是Pandas专门处理列表型列的内置方法,配合merge()和groupby()的向量化操作,比循环效率高得多,尤其是数据量较大时优势明显。
内容的提问来源于stack exchange,提问作者arkriger
相关产品推荐
相关产品推荐

