簡體   English   中英

通過軸0上的單列合並pandas DataFrame

[英]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由對齊Pconcat

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    +  +    +

您可以使用加入

df_b3.join(df_ka, on='P')

不要忘記選擇其他選項,例如“內部”,“外部” ...等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM