Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何仅在pandas中为选定案例回溯上一行的值_Python_Pandas_Pandas Groupby_Pandasql - Fatal编程技术网

Python 如何仅在pandas中为选定案例回溯上一行的值

Python 如何仅在pandas中为选定案例回溯上一行的值,python,pandas,pandas-groupby,pandasql,Python,Pandas,Pandas Groupby,Pandasql,我的数据如下所示 col_1 col_2 1 1 1 1 p 0 1 1 n 2 n 2 p 0 p 0 我想从列1计算列2中的值。我要应用的逻辑是:当col_1 value='p'时,将col_2中的值从col_2的前一行值替换为col_2中的其他值,col_2中的其他值不会因c

我的数据如下所示

   col_1  col_2
      1        1
      1        1
      p        0
      1        1
      n        2
      n        2
      p        0
      p        0
我想从列1计算列2中的值。我要应用的逻辑是:当col_1 value='p'时,将col_2中的值从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循环并以更简单的方式执行吗?

您可以使用
掩码
然后
ffill

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

非常感谢,非常清晰和智能的解决方案!