首页 > 解决方案 > 如何仅在熊猫中查看选定案例的前一行的值

问题描述

我的数据如下所示。

   col_1  col_2
      1        1
      1        1
      p        0
      1        1
      n        2
      n        2
      p        0
      p        0

我想从 col_1 计算 col_2 中的值。我要应用的逻辑是:当 col_1 值 ='p' 时,将 col_2 中的值替换为上一行的 col_2 值和 col_2 中的其他值对于 col_1 的任何其他值都不会改变,最终预期输出如下:

   col_1  col_2
      1        1
      1        1
      p        **1**
      1        1
      n        2
      n        2
      p        **2**
      p        **2**

除了其他列之外,我还根据 assign() 函数中的日期计算这些列。这是我无法弄清楚的唯一步骤。因为在这一行中,我正在查看前一行的值;所以 shift() 可以工作,但我只需要在 col_1 ='p' 时查找 col_2 的先前值。目前我正在通过 for 循环进行操作,这使我可以灵活地回顾 1 行并检查/替换值。由于 for 循环,这不是一个有效的解决方案。

您知道如何避免 for 循环并以更多熊猫方式进行吗?

标签: pythonpandaspandas-groupbypandasql

解决方案


您可以mask使用ffill

df['col_2'] = df['col_2'].mask(df['col_1']=='p').ffill()

推荐阅读