Home > OS >  Fil rows in df.column betwen rows if number of rows between is less than something
Fil rows in df.column betwen rows if number of rows between is less than something

Time:04-07

I have a df where i want to fill the rows in column values with True if the number of rows between values True in column values is less then two.

counter values
1 True
2 False
3 False
4 True
5 False
6 True
7 True
8 False
9 True
10 False
11 False

The result i want is like the df below:

counter values
1 True
2 False
3 False
4 True
5 True
6 True
7 True
8 True
9 True
10 False
11 False

CodePudding user response:

You can make groups starting with True, if the group is 2 items (or less), replace with True. Then compute the boolean OR with the original column:

N = 2
fill = df['values'].groupby(df['values'].cumsum()).transform(lambda g: len(g)<=N)
df['values'] = df['values']|fill  ## or df['values'] |= fill

output (here as new column value2 for clarity):

    counter  values  values2
0         1    True     True
1         2   False    False
2         3   False    False
3         4    True     True
4         5   False     True
5         6    True     True
6         7    True     True
7         8   False     True
8         9    True     True
9        10   False    False
10       11   False    False

Other option that works only in the particular case of N=2, check if both the row before and after is True:

df['values'] = df['values']|(df['values'].shift()&df['values'].shift(-1))
  • Related