Pandas:如何将小DataFrame合并到大DataFrame且保持原行数?
解决DataFrame合并后行数过多的问题
你的问题出在直接用inner merge时,df2中同一columnA存在重复行,导致合并时产生了笛卡尔积(比如df1的3行data1和df2的3行data1会匹配出9行)。要实现你想要的结果,需要先对df2做去重处理,再和df1做左连接。
具体步骤:
- 对df2去重:因为df2中同一
columnA对应的columnD和columnE值完全一致,所以可以保留每个columnA对应的唯一行。 - 左连接df1和去重后的df2:使用
how='left'确保保留df1的所有行,同时匹配df2中对应的数据。
完整代码示例:
import pandas as pd # 构造df1 df1 = pd.DataFrame({ 'columnA': ['data1', 'data1', 'data1', 'data2', 'data2', 'data3', 'data3'], 'columnB': [2, 2, 2, 3, 3, 4, 4], 'columnC': ['d', 'd', 'd', 'r', 'r', 'g', 'g'] }) # 构造df2 df2 = pd.DataFrame({ 'columnA': ['data1', 'data1', 'data1', 'data2', 'data2'], 'columnD': ['a', 'a', 'a', 'b', 'b'], 'columnE': ['x', 'x', 'x', 'y', 'y'] }) # 对df2按columnA去重,保留唯一的列组合 df2_unique = df2.drop_duplicates(subset=['columnA']) # 左连接合并两个DataFrame combined = pd.merge(df1, df2_unique, how='left', on='columnA') print(combined)
输出结果:
columnA columnB columnC columnD columnE 0 data1 2 d a x 1 data1 2 d a x 2 data1 2 d a x 3 data2 3 r b y 4 data2 3 r b y 5 data3 4 g NaN NaN 6 data3 4 g NaN NaN
这个结果和你期望的完全一致,行数和原df1相同,同时正确匹配了对应的数据,data3的缺失值会显示为NaN(和你的示例中空值效果一致)。
内容的提问来源于stack exchange,提问作者T-0
相关产品推荐
相关产品推荐

