我正在尝试对以下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")
使用df.sort_values
和loc
基于访问。
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
s进行计数,并基于此排序的计数访问行。
@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] 删除。
我来说两句