python - 匹配列熊猫数据框
问题描述
我想通过它们的列名匹配两个熊猫数据框。
import pandas as pd
df1 = pd.DataFrame([[0,2,1],[1,3,0],[0,4,0]], columns=['A', 'B', 'C'])
A B C
0 0 2 1
1 1 3 0
2 0 4 0
df2 = pd.DataFrame([[0,0,1],[1,5,0],[0,7,0]], columns=['A', 'B', 'D'])
A B D
0 0 0 1
1 1 5 0
2 0 7 0
如果名称匹配,则什么也不做。(保留df2的列)
如果一列在数据框 1 中但不在数据框 2 中,则将数据框 2 中的列添加为零向量。
如果一列在 Dataframe 2 中但不在 Dataframe 1 中,请将其删除。
输出应如下所示:
A B C
0 0 0 0
1 1 5 0
2 0 7 0
我知道我是否这样做:
df2 = df2[df1.columns]
我得到:
KeyError: "['C'] not in index"
我也可以手动添加零向量,但当然这是一个更长数据集的玩具示例。有没有更聪明/pythonic的方式来做到这一点?
解决方案
看来,df2
列应该与df1
此操作之后的列相同,因为应该添加 indf1
和不df2
应该添加的列,而df2
应该删除仅 in 的列。我们可以简单地将列与 a匹配(这相当于添加具有填充值的新列):reindex
df2
df1
fill_value=0
df2 = df2[df1.columns]
df2 = df2.reindex(columns=df1.columns, fill_value=0)
df2
:
A B C
0 0 0 0
1 1 5 0
2 0 7 0
推荐阅读
- python - SyntaxError:无效的语法。> def isUF2(buf)
- python - 为什么我从 PyCharm 运行的迁移不会影响我的本地数据库?
- asp.net-core - 来自空白已发布 .net 核心项目的 web.config 错误
- javascript - 使用flask和react,在html中引用js文件时出现404错误
- python - 如何在bash中转义转义引号
- sustainsys-saml2 - 使用 SAML2 库实现 SP 启动的场景
- c# - Unity3D:加快高分计数
- swift - 在 OSX 或 Windows (VM)、React Native 或 Swift 上使用 iOS 进行开发?
- javascript - 在 Google Maps API 中隐藏和显示标记
- c - 如何在嵌入式 c 中使用 volatile 变量的另一个函数