在熊猫的多列中排列行值

阿兹米尔法克里

我有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

大熊猫有可能吗?

耶斯列尔

是的,可以set_index与参数一起drop=False用于列中的索引:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章