繁体   English   中英

Pandas 根据条件移动行

[英]Pandas move row based on condition

我正在尝试将列中包含特定字符的每一行移动到 dataframe 的底部.....

    Index  Closer  Running
      0      4      AQ
      1      -      AQ
      2      -      AD
      3      2      AP
      4      9      AP
      5      5      AQ

我正在尝试将 Closer 列中包含“-”的每一行移动到 dataframe 的底部,所以我的结果 dataframe 看起来像这样,我该怎么做 Z34D1F91FB2E514B8576FAB1A75A8?

      Index  Closer  Running
      0      4        AQ
      1      2        AP
      2      9        AP
      3      5        AQ
      4      -        AQ
      5      -        AD

IIUC,这就是你需要的。

m = df.Closer.str.isdigit()
df[m].append(df[~m]).reset_index(drop=True)

Output

Index   Closer  Running
0   0   4   AQ
1   3   2   AP
2   4   9   AP
3   5   5   AQ
4   1   -   AQ
5   2   -   AD

一种解决方案是首先过滤 DataFrame,选择带有“-”的行和没有它的行。 之后,您创建一个新的 DataFrame,它最初不包含带有“-”的行,以及第二个 DF,其中仅存储带有“-”的行。 然后你将它们连接在一起。

d = pd.DataFrame(data = {'Closer':[4,'-','-',2,9,5],'Running':'AQ','AQ','AD','AP','AP','AQ']})
d = pd.concat([d[d.Closer!='-'],d[d.Closer=='-']])
d

使用新的 dataframe 过滤条件,然后连接两个 dataframe。

例如假设您的数据在df

df1 = pd.DataFrame()
df1 = df1.append(df[df["Closer"] != "-"])
df1 = df1.append(df[df["Closer"] == "-"])

这是一个屏幕截图:

在此处输入图像描述

IIUC

df.loc[(~df.Closer.str.isdigit()).sort_values(kind='mergesort').index]
Out[24]: 
   Index Closer Running
0      0      4      AQ
3      3      2      AP
4      4      9      AP
5      5      5      AQ
1      1      -      AQ
2      2      -      AD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM