将pandas DataFrames合并到0轴中的单列

时间:2018-03-29 13:04:45

标签: python pandas

我想组合几个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    +

如何用熊猫最好地实现这一目标?

2 个答案:

答案 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)

你可以use join

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

不要忘记选择其他选项,如“内部”,“外部”......等等。