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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:25:38