我有2个数据框。 df_A-这是一个模板数据框,具有按顺序指定的列数。
例如:[emp_id,名字,姓氏,年龄,性别,部门]
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相同。
我正在使用python3。我尝试使用
col_diff = df_A.columns.difference(df_B)
获取“性别”列。然后将其转换为列表
col_diff.tolist()
并将其添加到df_B。但是此列被添加到df_B的末尾,我得到
[001,约翰,马修,047,无]
但是我想保留与df_A相同的列顺序。
输出应为: [001,约翰,马修,无,047]
能请你帮忙吗?感谢您的宝贵时间。
答案 0 :(得分:1)
数据:
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
得到列的差,然后由dict.fromkeys
创建assign
个新列,最后使用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