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()
非常感谢,非常清晰和智能的解决方案!