количество, указанное c значения столбца - PullRequest
0 голосов
/ 07 января 2020

У меня есть следующий фрейм данных, и я хотел бы иметь столбец "counter_col_x", который должен "считать", где столбец x == 8. Важен только столбец x = 8.

counter_col_x   x    y
0       8    36
0       8    36
0       8    36
0       8    36
0       8    36
nan     1    0
nan     1    1
nan     1    0
1       8    36
1       8    36
1       8    36
1       8    37
1       8    36
nan     1    0
nan     1    1
nan     1    0
nan     1    0
2       8    36
2       8    37
2       8    36
2       8    37
2       8    36

Спасибо за любые намеки,

ура.

1 Ответ

3 голосов
/ 07 января 2020

Использование:

df = ( df.assign(counter_col_x = df.loc[df['x'].eq(8)]
                                   .groupby(df['x'].ne(df['x'].shift())
                                                 .cumsum())
                                   .ngroup()
                                  #.reindex(index = df.index) #only if necessary
                 )
         .reindex(columns = ['counter_col_x'] + df.columns.tolist()) )

или, может быть, лучше :

df = ( df.join(df.loc[df['x'].eq(8)]
                 .groupby(df['x'].ne(df['x'].shift())
                                 .cumsum())
                 .ngroup()
                #.reindex(index = df.index) #only if necessary
                 .rename('counter_col_x'))
      )

Выход

    counter_col_x  x   y
0             0.0  8  36
1             0.0  8  36
2             0.0  8  36
3             0.0  8  36
4             0.0  8  36
5             NaN  1   0
6             NaN  1   1
7             NaN  1   0
8             1.0  8  36
9             1.0  8  36
10            1.0  8  36
11            1.0  8  37
12            1.0  8  36
13            NaN  1   0
14            NaN  1   1
15            NaN  1   0
16            NaN  1   0
17            2.0  8  36
18            2.0  8  37
19            2.0  8  36
20            2.0  8  37
21            2.0  8  36
...