将空行移到datafram的底部

2024-10-01 00:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

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

有没有更干净的方法?或者有一个函数我可以用来做这个?你知道吗


Tags: 数据dataframenp公司nanlistpddf1
2条回答

编辑操作后的新答案

您很接近,但可以使用以下方法稍微清理代码:

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

pandas中还不存在,使用^{}^{}表示位置,并按^{}更改顺序:

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

或带有辅助列和^{}的纯溶液:

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

相关问题 更多 >