我目前正在研究熊猫问题,我想知道是否有解决此问题的简便方法。
我确实有熊猫表,它们的格式总是这样:
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]} )
这意味着列中的所有值都需要尽可能向左移动。 (首先需要填充第一列,然后是第二列,依此类推。)是否有一个简单的解决方案?
非常感谢。
答案 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.apply
与Series.dropna
和Series
构造函数一起使用:
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)