合并索引与列名不同的DataFrame:按索引匹配A2关联B2列
解决DataFrame按索引匹配合并的问题
我来帮你搞定这个合并的问题!你遇到的核心问题是df2的A2列存在重复值(比如"A"对应了两行数据),直接用merge/join会导致结果出现重复行,而你需要的是每个索引对应唯一的B2值。
解决步骤:
- 先清理df2:因为同一A2对应的B2值完全相同(比如所有"A"都对应"AA"),所以我们可以先去除A2列的重复条目,只保留每个A2对应的唯一行。
- 再将清理后的df2和df进行合并,用df的索引匹配df2的A2列。
完整代码示例:
import pandas as pd # 原始数据 d = {'A': [1, 1, 0, 1, 0, 1, 0], 'B': [0, 0, 0, 0, 0, 1, 1] } df = pd.DataFrame(data=d, index=["A", "B", "C", "D", "E", "F", "G"]) d2 = {'A2': ["D", "A", "A", "B", "C", "C", "E", "X", "F", "G"], 'B2': ["DD", "AA", "AA", "BB", "CC", "CC", "EE", "XX", "FF", "GG"], 'C3': [1, 1, 11, 35, 53, 2, 76, 45, 5, 34]} df2 = pd.DataFrame(data=d2) # 步骤1:清理df2,去除A2的重复值(同一A2的B2值一致,保留任意一行即可) df2_clean = df2.drop_duplicates(subset='A2', keep='first') # 步骤2:合并数据 - 方法一:用join(更简洁) df2_clean.set_index('A2', inplace=True) df_result = df.join(df2_clean['B2'], how='left') # 或者用merge的方式: # df_result = df.reset_index().merge(df2_clean, left_on='index', right_on='A2', how='left') # df_result = df_result.drop(columns=['index', 'A2', 'C3']).set_index(df.index) print(df_result)
输出结果:
A B B2 A 1 0 AA B 1 0 BB C 0 0 CC D 1 0 DD E 0 0 EE F 1 1 FF G 0 1 GG
为什么之前的方法不行?
因为df2中A2列有重复的索引值,直接merge/join会把所有匹配的行都关联进来,导致你的df出现重复行(比如原来的行"A"会变成两行)。先对df2去重,就能保证每个索引只匹配到唯一的B2值。
内容的提问来源于stack exchange,提问作者d4rty
相关产品推荐
相关产品推荐

