如何合并两个Pandas DataFrame并添加合并匹配结果的新列
解决方案
你可以通过以下两步完成需求:
- 对Dataframe2按
ErrorRow分组,将同一行的所有错误列合并为逗号分隔的字符串 - 将处理后的结果与Dataframe1进行左连接,把合并后的错误列添加到原表中
完整代码示例
import pandas as pd import numpy as np # 构造你的示例数据(新手可直接运行测试) df1 = pd.DataFrame({ 'ErrorRow': [3, 4, 7], 'MaterialID': [np.nan, np.nan, 56779], 'Description': ['Part 1', 'Part 2', 'Part 3'], 'UnitCost': [np.nan, 12, 25], 'Quantity': [100, np.nan, np.nan], 'Critical': ['false', 'true', 'false'], 'Location': ['West', 'East', 'West'] }) df2 = pd.DataFrame({ 'ErrorRow': [3, 3, 4, 4, 7], 'ErrorColumn': ['MaterialID', 'UnitCost', 'MaterialID', 'Quantity', 'Quantity'] }) # 聚合df2:同一ErrorRow的ErrorColumn合并为字符串 df2_aggregated = df2.groupby('ErrorRow')['ErrorColumn'].apply(', '.join).reset_index() # 合并到df1 final_df = pd.merge(df1, df2_aggregated, on='ErrorRow', how='left') print(final_df)
关键代码解释
groupby('ErrorRow')['ErrorColumn'].apply(', '.join):按行号分组后,用', '.join把每组的错误列名称拼接成一个字符串reset_index():将分组后的索引转换为普通列,避免合并时出现索引不匹配的问题pd.merge(..., how='left'):左连接确保Dataframe1的所有行都被保留,即使某行在Dataframe2中没有对应错误(示例中无此情况,但该参数让代码更通用)
运行结果
| ErrorRow | MaterialID | Description | UnitCost | Quantity | Critical | Location | ErrorColumn |
|---|---|---|---|---|---|---|---|
| 3 | NaN | Part 1 | NaN | 100 | false | West | MaterialID, UnitCost |
| 4 | NaN | Part 2 | 12 | NaN | true | East | MaterialID, Quantity |
| 7 | 56779 | Part 3 | 25 | NaN | false | West | Quantity |
内容的提问来源于stack exchange,提问作者TW3
相关产品推荐
相关产品推荐

