我有3个熊猫数据框,每个数据框包含1列。
df1 = pd.DataFrame({'col1':[111, 222, 333, 444, 555]})
df2 = pd.DataFrame({'col2':[222, 333, 555]})
df3 = pd.DataFrame({'col3':[111, 222, 333, 666]})
我知道如何将它们沿着列连接起来
pd.concat([df1, df2, df3], axis=1)
col1 col2 col3
111 222 111
222 333 222
333 555 333
444 NaN 666
555 NaN NaN
我想要的是,所有列的第一行必须为111
,如果111
不可用,它将为NaN
,这适用于后续行。
我想对数字进行排序,以便最终输出如下:
col1 col2 col3
111 NaN 111
222 222 222
333 333 333
444 NaN NaN
555 555 NaN
NaN NaN 666
这在大熊猫中有可能吗?
答案 0 :(得分:3)
是的,可以将带有参数drop=False
的{{3}}用于列的索引:
df1 = pd.DataFrame({'col1':[111, 222, 333, 444, 555]})
df2 = pd.DataFrame({'col2':[222, 333, 555]})
df3 = pd.DataFrame({'col3':[111, 222, 333, 666]})
df11 = df1.set_index('col1', drop=False)
df22 = df2.set_index('col2', drop=False)
df33 = df3.set_index('col3', drop=False)
dfs1 = [df11, df22, df33]
df = pd.concat(dfs1, axis=1)
print (df)
col1 col2 col3
111 111.0 NaN 111.0
222 222.0 222.0 222.0
333 333.0 333.0 333.0
444 444.0 NaN NaN
555 555.0 555.0 NaN
666 NaN NaN 666.0
df = pd.concat(dfs1, axis=1).reset_index(drop=True)
print (df)
col1 col2 col3
0 111.0 NaN 111.0
1 222.0 222.0 222.0
2 333.0 333.0 333.0
3 444.0 NaN NaN
4 555.0 555.0 NaN
5 NaN NaN 666.0
如果要通过第一列加入:
L = [x.set_index(x.columns[0], drop=False) for x in dfs]
df = pd.concat(L, axis=1).reset_index(drop=True)
print (df)
col1 col2 col3
0 111.0 NaN 111.0
1 222.0 222.0 222.0
2 333.0 333.0 333.0
3 444.0 NaN NaN
4 555.0 555.0 NaN
5 NaN NaN 666.0
答案 1 :(得分:2)
您可以尝试合并第一列中的数据框
df= f1
for f in [df2,df3]:
df = df.merge(f,left_on=df.columns[0],right_on=f.columns[0],how='outer')
出局:
col1 col2 col3
0 111.0 NaN 111.0
1 222.0 222.0 222.0
2 333.0 333.0 333.0
3 444.0 NaN NaN
4 555.0 555.0 NaN
5 NaN NaN 666.0