从左到右填充大熊猫列

时间:2020-01-30 11:31:42

标签: python pandas

我目前正在研究熊猫问题,我想知道是否有解决此问题的简便方法。

我确实有熊猫表,它们的格式总是这样:

df = pd.DataFrame({'A':[1,2,np.nan,np.nan,3],'B':[2,3,np.nan,5,2],'C':[2,3,7,5,9],'D':[1,2,3,np.nan,np.nan]} )

此数据框应转换为:

df = pd.DataFrame({'A':[1,2,7,5,3],'B':[2,3,3,5,2],'C':[2,3,np.nan,np.nan,9],'D':[1,2,np.nan,np.nan,np.nan]} )

这意味着列中的所有值都需要尽可能向左移动。 (首先需要填充第一列,然后是第二列,依此类推。)是否有一个简单的解决方案?

非常感谢。

1 个答案:

答案 0 :(得分:1)

使用自定义函数justify,仅将DataFrame转换为numpy数组:

#https://stackoverflow.com/a/44559180/2901002
df = pd.DataFrame(justify(df.to_numpy(),invalid_val=np.nan), columns=df.columns)
#pandas < 0.24
#df = pd.DataFrame(justify(df.values,invalid_val=np.nan), columns=df.columns)
print (df)
     A    B    C    D
0  1.0  2.0  2.0  1.0
1  2.0  3.0  3.0  2.0
2  7.0  3.0  NaN  NaN
3  5.0  5.0  NaN  NaN
4  3.0  2.0  9.0  NaN

如果性能不重要,则将DataFrame.applySeries.dropnaSeries构造函数一起使用:

df = df.apply(lambda x: pd.Series(x.dropna().to_numpy()), axis=1)
#pandas < 0.24
#df = df.apply(lambda x: pd.Series(x.dropna().values), axis=1)