Pandas多匹配连接实现:按列合并DataFrame并追加多匹配结果
解决DataFrame按列连接并合并多匹配结果的问题
问题描述
将两个DataFrame按单一列(如ID)连接,当存在多匹配情况时,把匹配到的结果合并追加至同一列,而非生成多行。
示例数据
- 第一个DataFrame(用户信息):
| ID | Name |
|---|---|
| 1 | Alice |
| 2 | Bob |
| 3 | Charlie |
- 第二个DataFrame(科目信息):
| ID | Subject |
|---|---|
| 1 | Math |
| 1 | Science |
| 2 | English |
期望输出
| ID | Name | Subject |
|---|---|---|
| 1 | Alice | Math, Science |
| 2 | Bob | English |
| 3 | Charlie | NaN |
解决方案
使用Pandas的分组聚合+左连接即可实现需求,具体步骤如下:
代码实现
import pandas as pd # 构造示例DataFrame(替换为你的实际数据即可) df_user = pd.DataFrame({ 'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie'] }) df_subject = pd.DataFrame({ 'ID': [1, 1, 2], 'Subject': ['Math', 'Science', 'English'] }) # 按ID分组,将同一ID下的科目合并为逗号分隔的字符串 df_subject_agg = df_subject.groupby('ID')['Subject'].apply(', '.join).reset_index() # 左连接两个DataFrame,保留用户表的所有行 final_df = pd.merge(df_user, df_subject_agg, on='ID', how='left') print(final_df)
代码说明
groupby('ID')['Subject'].apply(', '.join):对科目表按ID分组,将每组内的Subject值合并为一个字符串,用逗号加空格分隔reset_index():把分组后的索引转换为普通列,避免合并时出现索引不匹配的问题pd.merge(..., how='left'):采用左连接方式,确保用户表中的所有记录都被保留,没有匹配科目的行将显示NaN
内容的提问来源于stack exchange,提问作者Silent Killer
相关产品推荐
相关产品推荐

