按NaN计数的降序对数据框的行进行排序

胡安卡洛斯

我正在尝试对以下Pandas DataFrame进行排序:

         RHS  age  height  shoe_size  weight
0     weight  NaN     0.0        0.0     1.0
1  shoe_size  NaN     0.0        1.0     NaN
2  shoe_size  3.0     0.0        0.0     NaN
3     weight  3.0     0.0        0.0     1.0
4        age  3.0     0.0        0.0     1.0

以这样的方式,首先放置具有更多NaN列数的行。更准确地说,在上述df中,索引为1(2 Nans)的行应位于索引为0(1 NaN)的行之前。

我现在要做的是:

df.sort_values(by=['age', 'height', 'shoe_size', 'weight'], na_position="first")
cs95

使用df.sort_valuesloc基于访问。

df = df.iloc[df.isnull().sum(1).sort_values(ascending=0).index]
print(df)

         RHS  age  height  shoe_size  weight
1  shoe_size  NaN     0.0        1.0     NaN
2  shoe_size  3.0     0.0        0.0     NaN
0     weight  NaN     0.0        0.0     1.0
4        age  3.0     0.0        0.0     1.0
3     weight  3.0     0.0        0.0     1.0

df.isnull().sum(1)NaNs进行计数,并基于此排序的计数访问行。


@ayhan对上述解决方案进行很好的改进,包括pd.Series.argsort

df = df.iloc[df.isnull().sum(axis=1).mul(-1).argsort()]
print(df)

         RHS  age  height  shoe_size  weight 
1  shoe_size  NaN     0.0        1.0     NaN           
0     weight  NaN     0.0        0.0     1.0           
2  shoe_size  3.0     0.0        0.0     NaN           
3     weight  3.0     0.0        0.0     1.0           
4        age  3.0     0.0        0.0     1.0            

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章