【问题标题】:Move Null rows to the bottom of the dataframe将空行移动到数据框的底部
【发布时间】:2019-08-31 20:58:13
【问题描述】:

我有一个数据框:

df1 = pd.DataFrame({'a': [1, 2, 10, np.nan, 5, 6, np.nan, 8],
                   'b': list('abcdefgh')})
df1

     a      b
0   1.0     a
1   2.0     b
2   10.0    c
3   NaN     d
4   5.0     e
5   6.0     f
6   NaN     g
7   8.0     h

我想将 a 为 np.nan 的所有行移到数据框的底部

df2 = pd.DataFrame({'a': [1, 2, 10, 5, 6, 8, np.nan,  np.nan],
                   'b': list('abcefhdg')})
df2

     a      b
0   1.0     a
1   2.0     b
2   10.0    c
3   5.0     e
4   6.0     f
5   8.0     h
6   NaN     d
7   NaN     g

我试过这个:

na = df1[df1.a.isnull()]
df1.dropna(subset = ['a'], inplace=True)
df1 = df1.append(na)
df1

有没有更清洁的方法来做到这一点?或者有没有我可以使用的功能?

【问题讨论】:

  • 您需要排序还是移动?
  • 我需要移动值
  • 好的,所以sort_values不能用了,对吧?
  • 也许是最好的更改数据,不会让其他人感到困惑 :)
  • 这确实令人困惑。他的输出看起来像 sort_values 和 na_position

标签: python python-3.x pandas numpy dataframe


【解决方案1】:

编辑 OP 后的新答案

您已经很接近了,但您可以使用以下内容稍微清理一下您的代码:

df1 = pd.concat([df1[df1['a'].notnull()], df1[df1['a'].isnull()]], ignore_index=True)

print(df1)
      a  b
0   1.0  a
1   2.0  b
2  10.0  c
3   5.0  e
4   6.0  f
5   8.0  h
6   NaN  d
7   NaN  g

旧答案
sort_valuesna_position=last 参数一起使用:

df1 = df1.sort_values('a', na_position='last')

print(df1)
     a  b
0  1.0  a
1  2.0  b
2  3.0  c
4  5.0  e
5  6.0  f
7  8.0  h
3  NaN  d
6  NaN  g

【讨论】:

  • 新的解决方案与我的类似,但绝对干净得多。谢谢
【解决方案2】:

pandas 中尚不存在,请使用Series.isnaSeries.argsort 作为职位并通过DataFrame.iloc 更改排序:

df1 = df1.iloc[df1['a'].isna().argsort()].reset_index(drop=True)
print (df1)
      a  b
0   1.0  a
1   2.0  b
2  10.0  c
3   5.0  e
4   6.0  f
5   8.0  h
6   NaN  d
7   NaN  g

或带有辅助列和DataFrame.sort_values的纯熊猫解决方案:

df1 = (df1.assign(tmp=df1['a'].isna())
          .sort_values('tmp')
          .drop('tmp', axis=1)
          .reset_index(drop=True))
print (df1)
      a  b
0   1.0  a
1   2.0  b
2  10.0  c
3   5.0  e
4   6.0  f
5   8.0  h
6   NaN  d
7   NaN  g

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 2017-05-23
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多