Skip to main content
 首页 » 编程设计

python之将空行移动到数据框的底部

2025年05月04日20unruledboy

我有一个数据框:

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 

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

请您参考如下方法:

编辑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_values 与 na_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