如何仅在 pandas 中查看 select 个案例的前一行值
how to look back values of previous row for select cases only in pandas
我的数据如下所示。
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 和 [=25= 中的其他值替换 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 行和 check/replace 值。由于 for 循环,这不是一个有效的解决方案。
您知道如何避免 for 循环并以更多 pandas 方式进行吗?
您可以使用 mask
然后 ffill
:
df['col_2'] = df['col_2'].mask(df['col_1']=='p').ffill()
我的数据如下所示。
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 和 [=25= 中的其他值替换 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 行和 check/replace 值。由于 for 循环,这不是一个有效的解决方案。
您知道如何避免 for 循环并以更多 pandas 方式进行吗?
您可以使用 mask
然后 ffill
:
df['col_2'] = df['col_2'].mask(df['col_1']=='p').ffill()