gpt4 book ai didi

python - 如何有条件地删除 Pandas 中的行

转载 作者:行者123 更新时间:2023-12-03 15:35:32 26 4
gpt4 key购买 nike

我有以下数据框:

        True_False  cum_val
Date
2018-01-02 False NaN
2018-01-03 False 0.006399
2018-01-04 False 0.010427
2018-01-05 False 0.017461
2018-01-08 False 0.019124
2018-01-09 False 0.020426
2018-01-10 False 0.019314
2018-01-11 False 0.026348
2018-01-12 False 0.033098
2018-01-16 False 0.029573
2018-01-17 False 0.038988
2018-01-18 False 0.037372
2018-01-19 False 0.041757
2018-01-22 False 0.049824
2018-01-23 False 0.051998
2018-01-24 False 0.051438
2018-01-25 False 0.052041
2018-01-26 False 0.063882
2018-01-29 False 0.057150
2018-01-30 True -0.010899
2018-01-31 True -0.010410
2018-02-01 True -0.011058
2018-02-02 True -0.032266
2018-02-05 True -0.073246
2018-02-06 True -0.055805
2018-02-07 True -0.060806
2018-02-08 True -0.098343
2018-02-09 True -0.083407
2018-02-12 False 0.013915
2018-02-13 False 0.016528
2018-02-14 False 0.029930
2018-02-15 False 0.041999
2018-02-16 False 0.042373
2018-02-20 False 0.036531
2018-02-21 False 0.031035
2018-03-06 False 0.013671

如何在 False 之后删除第二行值所有的 True值直到第二个 True Value直到第二个 False ?

例如:
    True_False  cum_val
Date
2020-01-21 False 0.022808
2020-01-22 False 0.023097
2020-01-23 True 0.001141
2020-01-24 True -0.007901 # <- Start drop here since this is the second True
2020-01-27 True -0.023632
2020-01-28 False -0.013578
2020-01-29 False -0.000867 #< - End Drop Here Since this is the second False
2020-01-30 False 0.003134

编辑1:

我想在新的 df 上再添加 1 个条件:
2020-01-22  0.000289    False   
2020-01-23 0.001141 True
2020-01-27 -0.015731 True # <- Start Drop Here
2020-01-28 0.010054 True
2020-01-29 -0.000867 False
2020-01-30 0.003134 True #<-End drop here
2020-02-03 0.007255 True

正如您在评论中提到的:[真,真,真,假,真]

在这种情况下,它仍然会在第二个 True 处开始下降。值但会在第一个 False 之后立即停止下跌即使第二个值已切换为 True .如果下一个值仍然是 True将其降到 False 之后的值

最佳答案

让我们尝试使用 whereffill和参数 limit=2然后 bool 过滤:

df[~(df['True_False'].where(df['True_False']).ffill(limit=2).cumsum() > 1)]

输出:
|    | Date       | True_False   |   cum_val |
|----|------------|--------------|-----------|
| 0 | 2020-01-21 | False | 1 |
| 1 | 2020-01-22 | False | 2 |
| 2 | 2020-01-23 | True | 3 |
| 7 | 2020-01-28 | False | 8 |

细节:
  • 首先让我们使用 where 将 False 转换为 np.nan
  • 接下来,在最后一个 True 之后填充前两个 np.nan 使用ffill(limit=2)
  • 现在,让我们使用 cumsum所以我们可以添加连续的 True 并选择
    那些大于 2
  • 并否定,将虚假记录保留在第一个真实记录之上,并且
    第三个虚假记录等等。
  • 关于python - 如何有条件地删除 Pandas 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59998241/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com