df = pd.DataFrame(
{
"group": [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,1, 1, 1, 1],
"value": [0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,0, 0, 1, 1],
"desiredResult": [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0,0, 0, 1, 1],
})
字符串
的数据
这里我的目标是基于两个条件来生成bfill():
bfill()仅当“组” 具有1时
- in**“value”,bfill()仅当距离当前位置两行或更少**1时才返回
ex.
- values[2:5] ==>我们要回填desiredResult[2:5]中的1,因为在距离当前位置两行的地方有一个1,也就是values[5]
- values[5:7] ==>我们要回填desiredResult[5:7]中的1,因为在距离当前位置1行的地方有一个1,也就是values[7]
- values[11:14] ==>我们要回填desiredResult[11:14]中的1,因为在距离当前位置两行的地方有一个1,也就是values[14]
- values[17:20] ==>我们要回填desiredResult[17:20]中的1,因为在距离当前位置两行的地方有一个1,也就是values[20]
- values [24:25] =此处不会发生任何事情,因为1位于离values[24]大约3行的位置
1条答案
按热度按时间ukxgm1gy1#
您可以在
value
中形成以1
结尾的组,使用groupby.transform
检查组大小,并使用它将0
s替换为1
:字符串
df['out'] = df['value'].mask(m1&m2, 1)
替换df.loc[m1&m2, 'value'] = 1
。*输出量:
型
中间体和输出作为新色谱柱:
型