如何在Pandas中实现DataFrame特殊合并:匹配多行合并为单行
Pandas DataFrame 合并:多行聚合为逗号分隔字符串解决方案
步骤1:准备示例数据
import pandas as pd df1 = pd.DataFrame({ 'Element': ['Ae_aag2/0013F', 'Ae_aag2/0014F'], 'Range': ['5-2500', '300-2100'], 'Family': ['Chuviridae', 'Flaviviridae'] }) df2 = pd.DataFrame({ 'Element': ['0012F', '0013F', '0013F'], 'Range': ['30-720', '23-1200', '1300-2610'], 'Family': ['Chuviridae', 'Chuviridae', 'Xinmoviridae'] })
步骤2:预处理df2,聚合多行数据
先将df2的Element和Range拼接为目标格式,再按Element分组,把对应多行的内容合并为逗号分隔的字符串:
# 拼接Element和Range为指定格式 df2['Element_Range'] = df2['Element'] + ':' + df2['Range'] # 分组聚合,合并字符串 df2_agg = df2.groupby('Element').agg( Element_df2=('Element_Range', lambda x: ','.join(x)), Family_df2=('Family', lambda x: ','.join(x)) ).reset_index()
步骤3:处理df1,提取匹配键
从df1的Element字段中提取/后的部分,作为和df2匹配的关键字:
df1['match_key'] = df1['Element'].str.split('/').str[-1]
步骤4:合并并整理最终结果
将处理后的df1和聚合后的df2合并,再调整列名和字段顺序:
# 按匹配键合并数据 merged_df = pd.merge( df1, df2_agg, left_on='match_key', right_on='Element', how='left' # 用left保留df1所有行,如需只保留匹配项可改为inner ) # 整理输出字段 final_df = merged_df.rename( columns={'Element_x': 'Element_df1', 'Family_x': 'Family_df1'} )[['Element_df1', 'Element_df2', 'Family_df1', 'Family_df2']] # 空值替换为空字符串(可选) final_df = final_df.fillna('') print(final_df)
输出结果
Element_df1 Element_df2 Family_df1 Family_df2 0 Ae_aag2/0013F 0013F:23-1200,0013F:1300-2610 Chuviridae Chuviridae,Xinmoviridae 1 Ae_aag2/0014F Flaviviridae
内容的提问来源于stack exchange,提问作者Yago Dias
相关产品推荐
相关产品推荐

