Pandas两个DataFrame基于列B合并输出A、B、C三列问题求解
问题根因
pd.concat是按行索引对齐做横向拼接,不会根据指定列值做关联匹配,自然无法实现按公共列B合并的需求,还会因为两个表都有B列出现重复列名- 两个表的B列数据类型不统一:e表B列是浮点数类型,f表B列是字符串类型,即便用关联函数也会因为类型不一致无法正确匹配值
正确实现代码
import pandas as pd e = [[1.0, 2.0], [2.0, 3.0], [3.0, 4.0], [4.0, 5.0], [5.0, 6.0], [6.0, 7.0], [7.0, 8.0], [8.0, 9.0], [9.0, 10.0], [10.0, 11.0], [11.0, 12.0], [12.0, 13.0], [13.0, 14.0]] f = [['2', '*'], ['3', '*'], ['5', '*'], ['6', '*'], ['13', '*'], ['14', '*']] e = pd.DataFrame(e, columns=['A', 'B']) f = pd.DataFrame(f, columns=['B', 'C']) # 统一公共列B的数据类型 f['B'] = f['B'].astype(float) # 以e为基准按B列左连接 result = pd.merge(e, f, on='B', how='left') print(result)
代码说明
- 先将f表B列的字符串类型转为和e表一致的浮点数类型,保证关联匹配时值可以对应上
- 用
pd.merge做表关联:on='B'指定按公共列B匹配,how='left'指定保留左表e的所有行,仅关联f表中B列匹配的C列值,未匹配到的C列自动填充NaN - 最终返回结果仅包含A、B、C三列,符合需求
内容的提问来源于stack exchange,提问作者Mary
相关产品推荐
相关产品推荐

