首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按NaN计数的降序对数据行进行排序

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

Stack Overflow用户
提问于 2017-08-27 22:10:22
回答 4查看 12K关注 0票数 9

我试图对下面的Pandas DataFrame进行排序:

代码语言:javascript
代码运行次数:0
运行
复制
         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

这样,具有更多NaNs列的行首先被定位。更准确地说,在上面的df中,索引1(2个Nans)的行应该在索引0 (1 NaN)的那一行之前。

我现在要做的是:

代码语言:javascript
代码运行次数:0
运行
复制
df.sort_values(by=['age', 'height', 'shoe_size', 'weight'], na_position="first")
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-08-27 22:21:03

使用基于df.sort_valuesloc的访问。

代码语言:javascript
代码运行次数:0
运行
复制
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)NaN进行计数,并根据这个排序计数访问行。

@ayhan为上述解决方案提供了一个nice little improvement,涉及到pd.Series.argsort

代码语言:javascript
代码运行次数:0
运行
复制
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            
票数 16
EN

Stack Overflow用户

发布于 2019-03-29 09:47:08

代码语言:javascript
代码运行次数:0
运行
复制
df.isnull().sum().sort_values(ascending=False)
票数 4
EN

Stack Overflow用户

发布于 2017-08-27 22:18:22

下面是一条能做到这一点的单线线:

代码语言:javascript
代码运行次数:0
运行
复制
df.assign(Count_NA = lambda x: x.isnull().sum(axis=1)).sort_values('Count_NA', ascending=False).drop('Count_NA', axis=1)
#          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

这是通过分配一个临时列("Count_NA")来计算每行中的NAs,对该列进行排序,然后删除它,所有这些都在同一个表达式中完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45909776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档