numpy 回填数据,条件是在当前位置之前有1 < =2行

jvlzgdj9  于 9个月前  发布在  其他
关注(0)|答案(1)|浏览(107)
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行的位置
ukxgm1gy

ukxgm1gy1#

您可以在value中形成以1结尾的组,使用groupby.transform检查组大小,并使用它将0 s替换为1

N = 2
g = df.loc[::-1, 'value'].eq(1).cumsum()
m1 = df.groupby(g).transform('size').le(N+1)
m2 = df['group'].eq(1) & df['value'].eq(0)

df.loc[m1&m2, 'value'] = 1

字符串

  • 注意:如果你想要一个新列,用df['out'] = df['value'].mask(m1&m2, 1)替换df.loc[m1&m2, 'value'] = 1。*

输出量:

group  value  desiredResult
0       0      0              0
1       1      1              1
2       1      1              1
3       1      1              1
4       1      1              1
5       1      1              1
6       1      1              1
7       1      1              1
8       0      0              0
9       0      0              0
10      0      0              0
11      1      1              1
12      1      1              1
13      1      1              1
14      1      1              1
15      0      0              0
16      0      0              0
17      1      1              1
18      1      1              1
19      1      1              1
20      1      1              1
21      1      0              0
22      1      0              0
23      1      0              0
24      1      1              1
25      1      1              1


中间体和输出作为新色谱柱:

group  value  desiredResult   g     m1     m2  out
0       0      0              0  10   True  False    0
1       1      1              1  10   True  False    1
2       1      1              1   9   True  False    1
3       1      0              1   8   True   True    1
4       1      0              1   8   True   True    1
5       1      1              1   8   True  False    1
6       1      0              1   7   True   True    1
7       1      1              1   7   True  False    1
8       0      0              0   6  False  False    0
9       0      0              0   6  False  False    0
10      0      0              0   6  False  False    0
11      1      1              1   6  False  False    1
12      1      0              1   5   True   True    1
13      1      0              1   5   True   True    1
14      1      1              1   5   True  False    1
15      0      0              0   4   True  False    0
16      0      0              0   4   True  False    0
17      1      1              1   4   True  False    1
18      1      0              1   3   True   True    1
19      1      0              1   3   True   True    1
20      1      1              1   3   True  False    1
21      1      0              0   2  False   True    0
22      1      0              0   2  False   True    0
23      1      0              0   2  False   True    0
24      1      1              1   2  False  False    1
25      1      1              1   1   True  False    1

相关问题