是否可以使用contains()删除数据帧中上面的行?

2024-10-03 23:22:09 发布

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

我有一个脚本,它使用str.contains从工作事务列表中删除“反转”,其工作原理如下:

df = df[~df.claimOrReversal.str.contains("R", na=False)]

对其执行操作的dataframe列如下所示:

^{tb1}$

最终的结果是:

^{tb2}$

然而,我们需要始终在R之前删除R和C两行。系统的工作方式是,在反转之前总是有索赔,因此简单地删除反转和反转上方的行将始终有效。但是,我不确定如何使用contains()实现这一点,我想我可能必须使用numpy索引来代替它

实际预期结果如下所示:

^{tb3}$

Tags: 脚本falsedataframedf列表系统方式事务
1条回答
网友
1楼 · 发布于 2024-10-03 23:22:09

您可以创建一个临时列tmp,其中包含df.ClaimOrReversal.shift(-1)

然后您可以删除df.ClaimOrReversaldf.tmp中的R

In [1]: import pandas as pd

In [2]: df = pd.DataFrame(["C", "C", "R", "C", "R", "C"], columns=["ClaimOrReversal"])

In [3]: df
Out[3]:
  ClaimOrReversal
0               C
1               C
2               R
3               C
4               R
5               C

In [4]: df["tmp"] = df.ClaimOrReversal.shift(-1)
   ...: df
Out[4]:
  ClaimOrReversal  tmp
0               C    C
1               C    R
2               R    C
3               C    R
4               R    C
5               C  NaN

In [5]: df.drop(df.query('tmp == "R" or ClaimOrReversal=="R"').index)[["ClaimOrReversal"]]
Out[5]:
  ClaimOrReversal
0               C
5               C

相关问题 更多 >