我有一个像这样的DataFrame:
0 1 2 0 0.0 1.0 2.0 1 NaN 1.0 2.0 2 NaN NaN 2.0
我想要得到的是
Out[116]: 0 1 2 0 0.0 1.0 2.0 1 1.0 2.0 NaN 2 2.0 NaN NaN
到目前为止,这是我的方法。
df.apply(lambda x : (x[x.notnull()].values.tolist()+x[x.isnull()].values.tolist()),1) Out[117]: 0 1 2 0 0.0 1.0 2.0 1 1.0 2.0 NaN 2 2.0 NaN NaN
有没有有效的方法来实现这一目标?apply这是减慢速度的方法。谢谢您的助手!:)
apply
我的真实数据大小
df.shape Out[117]: (54812040, 1522)
这是使用justify-的NumPy解决方案-
justify
In [455]: df Out[455]: 0 1 2 0 0.0 1.0 2.0 1 NaN 1.0 2.0 2 NaN NaN 2.0 In [456]: pd.DataFrame(justify(df.values, invalid_val=np.nan, axis=1, side='left')) Out[456]: 0 1 2 0 0.0 1.0 2.0 1 1.0 2.0 NaN 2 2.0 NaN NaN
如果要节省内存,请改回分配-
df[:] = justify(df.values, invalid_val=np.nan, axis=1, side='left')