python-3.x - 比较 2 个数据框并按顺序添加列(如果不存在)
问题描述
我有 2 个数据框。df_A - 这是一个模板数据框,它按顺序具有特定数量的列。
例如:[emp_id、first_name、last_name、年龄、性别、部门]
df_B - 这是一个数据框,可能包含也可能不包含 df_A 的所有列。
例如:[emp_id, first_name, last_name, age,dept] = [ 001, john, mathew, 32, 047]
我想比较 df_B 和 df_A 以使用 [001, john, mathew, None, 047] 创建一个新的数据框,其列名与 df_A 的列名相同。
我正在使用 python 3。我尝试使用
col_diff = df_A.columns.difference(df_B)
获取“性别”列。然后将其转换为列表
col_diff.tolist()
并将其添加到 df_B。但是这一列被添加到 df_B 的末尾,我得到了
[001,约翰,马修,047,无]
但我想保留与 df_A 相同的列顺序。
输出应该是:[001, john, mathew, None, 047]
能否请你帮忙?谢谢你的时间。
解决方案
数据:
c1 = ['emp_id', 'first_name', 'last_name', 'age', 'gender', 'dept']
df_A = pd.DataFrame(columns=c1)
print (df_A)
Empty DataFrame
Columns: [emp_id, first_name, last_name, age, gender, dept]
Index: []
c2 = ['emp_id', 'first_name', 'last_name', 'age', 'dept']
df_B = pd.DataFrame([[ '001', 'john', 'mathew', 32, '047']], columns=c2)
print (df_B)
emp_id first_name last_name age dept
0 001 john mathew 32 047
首先获取列的差异difference
,然后assign
创建新列dict.fromkeys
并用于相同的排序使用reindex
:
col_diff = df_A.columns.difference(df_B.columns)
print (col_diff)
Index(['gender'], dtype='object')
df = df_B.assign(**dict.fromkeys(col_diff, None)).reindex(columns=df_A.columns)
print (df)
emp_id first_name last_name age gender dept
0 001 john mathew 32 None 047
另一种解决方案:
df = df_B.reindex(columns=df_A.columns)
print (df)
emp_id first_name last_name age gender dept
0 001 john mathew 32 NaN 047
推荐阅读
- python - 芹菜节拍任务未执行
- ruby-on-rails - 是否允许在没有主键的情况下使用 ActiveRecord 功能?
- machine-learning - 自动编码器无法捕获小伪影
- javascript - 如何让 webpack 包含为 Typescript Nodejs(不是浏览器)项目生成的声明文件(以及如何使用)
- ruby-on-rails - OpenSSL::PKey::RSA 创建没有密码的密钥
- java - Android Studio Java - 购物车应用程序,总计问题
- python - 回调cplex期间出错,我无法解决
- python-3.x - Python3 SMTP'连接意外关闭'
- javascript - 如何从云火存储数据库中获取特定的字段数据?
- javascript - 创建一个负数系列的 JavaScript 数组,该数组基于单个整数以 -100 的增量递减