我想组合几个pandas DataFrames
,例如:(所有输入都有第一列P
加上唯一命名的第二列。)
df_b3 = pd.DataFrame({'P': ['l1','l3'],
'b3': ['+','+']},
index=[0,1])
df_ka = pd.DataFrame({'P': ['l1','l2','l3'],
'ka': ['+','+','+']},
index=[0,1,2])
df_kb = pd.DataFrame({'P': ['l2','l3'],
'kb': ['+','+']},
index=[0,1])
输出应该是这样的:(它应该有与输入一样多的列,加上P
的一列,并且列P
中的每个值应该只有一行在任何输入中。)
P b3 ka kb
0 l1 + + NaN
1 l2 NaN + +
2 l3 + + +
一个简单的pd.concat([df_b3, df_ka, df_kb])
给了我太多的行和NaN
s:
P b3 ka kb
0 l1 + NaN NaN
0 l1 NaN + NaN
1 l2 NaN + NaN
0 l2 NaN NaN +
1 l3 + NaN NaN
2 l3 NaN + NaN
1 l3 NaN NaN +
如何用熊猫最好地实现这一目标?
答案 0 :(得分:4)
我认为每个DataFrame
需要set_index
才能在concat
中按P
列对齐:
dfs = [df_b3, df_ka, df_kb]
dfs1 = [x.set_index('P') for x in dfs]
#same as
#dfs1 = [df_b3.set_index('P'), df_ka.set_index('P'), df_kb.set_index('P')]
df = pd.concat(dfs1, axis=1).rename_axis('P').reset_index()
print (df)
P b3 ka kb
0 l1 + + NaN
1 l2 NaN + +
2 l3 + + +
答案 1 :(得分:0)