[英]Combine pandas DataFrames by single column in axis 0
我想結合幾個這樣的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
:
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 +
熊貓如何最好地做到這一點?
我認為需要set_index
每個DataFrame
由對齊P
列concat
:
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 + + +
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.