首页 > 解决方案 > 带有 group by 并匹配条件的 ffil

问题描述

每当您在列log中找到第一个 1 时,我愿意为每个 id 填充值log

例子:

df 

id   log
 1     0
 1     1
 1     0
 1     0
 2     1
 2     0
 3     1
 3     0
 3     1

id   log  ffil_log
 1     0         0
 1     1         1
 1     0         1
 1     0         1
 2     1         1
 2     0         1
 3     1         1
 3     0         1
 3     1         1 

我的尝试是:

df['ffil_log']=df.log.where(df.log==1).groupby(df.id).ffill()

标签: pythonpandasnumpy

解决方案


您可以使用cummaxgroupby例如:

df['ffil_log'] = df.groupby('id')['log'].cummax()

对于每个 id,一旦您连续达到 1,它将是之后的值,并且您会得到预期的结果

   id  log  ffil_log
0   1    0         0
1   1    1         1
2   1    0         1
3   1    0         1
4   2    1         1
5   2    0         1
6   3    1         1
7   3    0         1
8   3    1         1

推荐阅读