Как изменить значения строк в зависимости от условий в кадре данных? - PullRequest
1 голос
/ 23 сентября 2019

У меня есть датафрейм, показанный ниже,

    type  label
0      0      0
1      0      0
2      0      0
3      0      0
4      2      1
5      2      1
6      2      1
7      2      1
8      2      1
9      2      1
10     0      0
11     0      0
12     0      0
13     0      0
14     0      0
15     0      0
16     0      0
17     0      0
18     0      0
19     0      0 

(Нужно сделать какое-то волшебство)

Изменение должно быть сделано в столбце типа так, чтобыв строке, если label равно 0, а type равно 0, то следующая строка type должна быть назначена 2.

Полный кадр данных должен выглядеть следующим образом:

    type  label
0      0      0
1      2      0
2      2      0
3      0      0
4      2      1
5      2      1
6      2      1
7      2      1
8      2      1
9      2      1
10     0      0
11     2      0
12     2      0
13     2      0
14     2      0
15     2      0
16     2      0
17     2      0
18     2      0
19     2      0 

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Использование .eq() для маскирования строки, в которой столбцы type и label имеют значение 0 и .shift() для сдвига индекса на требуемое количество периодов с необязательнымFreq.

Пример.

m = df['type'].eq(0) & df['label'].eq(0)
df.loc[m == m.shift(1),'type'] = 2
print(df)

O / P:

    type  label
0      0      0
1      2      0
2      2      0
3      2      0
4      2      1
5      2      1
6      2      1
7      2      1
8      2      1
9      2      1
10     0      0
11     2      0
12     2      0
13     2      0
14     2      0
15     2      0
16     2      0
17     2      0
18     2      0
19     2      0
0 голосов
/ 23 сентября 2019

Аналогичный подход

df['Condition']=(df==0).all(axis=1)
df['Condition']=df['Condition'].shift(periods=1).fillna(False)
df['Type'] = np.where(df['Condition'], 2, df['Type'])

Type  label  Condition
0      0      0      False
1      2      0       True
2      2      0       True
3      2      0       True
4      2      1       True
5      2      1      False
6      2      1      False
7      2      1      False
8      2      1      False
9      2      1      False
10     0      0      False
11     2      0       True
12     2      0       True
13     2      0       True
14     2      0       True
15     2      0       True
16     2      0       True
17     2      0       True
18     2      0       True
19     2      0       True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...