python - 将 NaN 移到各自行的末尾

标签 python pandas dataframe nan

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

     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)

最佳答案

这是一个使用 justify 的 NumPy 解决方案 -

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')

关于python - 将 NaN 移到各自行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45970751/

相关文章:

python - 递归 python 函数中的持久对象

python - 如何在 Tensorflow 中调整未知大小的图像大小(tf.shape(input) 方法不起作用)

python - 使用相同的键将两本词典合二为一?

python - Pandas:为什么附加到 float 和整数的数据帧比充满 NaN 的数据帧要慢

python - Pandas 中没有 "from_csv"方法

python - 在 Pandas Dataframe 单元格中查找 [Python 列表] 的匹配值之和?

python - 在 Pandas 中四舍五入到最接近的 1000

python - 应用正则表达式创建新列 - isdigit() 与 isnumeric()

python - 如何连接两个具有重复列名的数据框?

r - 平均时间 - hh :mm:ss - group by a variable