如何按列名匹配pandas DataFrame并按规则对齐两个数据集?
你之前直接用df2[df1.columns]报错,是因为这个语法只能筛选已经存在于df2的列,df2没有的列就会触发KeyError。
这个需求用pandas内置的reindex方法就能一行搞定,完美匹配你说的三条规则:
import pandas as pd # 示例数据 df1 = pd.DataFrame([[0,2,1],[1,3,0],[0,4,0]], columns=['A', 'B', 'C']) df2 = pd.DataFrame([[0,0,1],[1,5,0],[0,7,0]], columns=['A', 'B', 'D']) # 核心实现代码 df2 = df2.reindex(columns=df1.columns, fill_value=0)
执行后得到的结果完全符合预期:
A B C 0 0 0 0 1 1 5 0 2 0 7 0
该方法和规则的对应逻辑:
- 两个DataFrame都存在的列(示例中A、B):直接保留df2的原有数据,匹配规则1
- 仅在df1中存在的列(示例中C):reindex会自动新增该列,所有值填充为指定的
fill_value=0,匹配规则2 - 仅在df2中存在的列(示例中D):不在指定列集合里的列会被自动删除,匹配规则3
内容的提问来源于stack exchange,提问作者FcoZ
相关产品推荐
相关产品推荐

