将 NaN 移至各自行的末尾

2024-02-20

我有一个像这样的数据框:

     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这是放慢速度的方法。 谢谢你的助手!:)


我的真实数据大小

df.shape
Out[117]: (54812040, 1522)

这是一个 NumPy 解决方案,使用justify https://stackoverflow.com/a/44559180/ -

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')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 NaN 移至各自行的末尾 的相关文章

随机推荐