2017-01-31 2 views
1

У меня есть кадр данных следующим образом (пример показан ниже)манипулирования данными на фиктивные переменные Python

Date  event A B C D 
2015-10-01 A  1 0 0 0 
2015-10-02 A|B 1 1 0 0 
2015-11-01 C  0 0 1 0 
2015-10-07 D  0 0 0 1 

Здесь A указывает только событие А произошло и А | В обозначает А и Б произошло в определенный день. Теперь у меня уже сформированы фиктивные переменные для события, как указано выше. Впоследствии я хочу, чтобы клубы B, C и D были включены в одно мероприятие под названием «minor». Так что мой результат будет выглядеть следующим образом:

Date  event A Minor 
2015-10-01 A  1 0 
2015-10-02 A|B 1 1 
2015-11-01 C  0 1 
2015-10-07 D  0 1 

Как вы можете видеть на второй ряду, Minor равно 1, как B также происходит в тот же день. Я немного смущен, как подойти к этому. В действительности у меня есть 20 + столбцов, которые нужно сгруппировать в minor. Любая помощь будет оценена.

+0

'DF [[ 'B', 'C', 'D']]. Сумма (ось = 1)'? – Zero

ответ

1

Я думаю, что вам нужно DataFrame.max, если нужно только 0 и 1 выход:

cols = ['B','C','D'] 

df['Minor'] = df[cols].max(axis=1) 
df = df.drop(cols, axis=1) 
print (df) 
     Date event A Minor 
0 2015-10-01  A 1  0 
1 2015-10-02 A|B 1  1 
2 2015-11-01  C 0  1 
3 2015-10-07  D 0  1 

Или, если значения суммы нужно использовать DataFrame.sum:

df['Minor'] = df[cols].sum(axis=1) 
df = df.drop(cols, axis=1) 
print (df) 
     Date event A Minor 
0 2015-10-01  A 1  0 
1 2015-10-02 A|B 1  1 
2 2015-11-01  C 0  1 
3 2015-10-07  D 0  1 

Разница в изменил df:

print (df) 
     Date event A B C D 
0 2015-10-01  A 1 0 0 0 
1 2015-10-02 A|B 1 1 0 0 
2 2015-11-01 C|D 0 0 1 1 
3 2015-10-07  D 0 0 0 1 

cols = ['B','C','D'] 

df['Minor'] = df[cols].sum(axis=1) 
df = df.drop(cols, axis=1) 
print (df) 
     Date event A Minor 
0 2015-10-01  A 1  0 
1 2015-10-02 A|B 1  1 
2 2015-11-01 C|D 0  2 
3 2015-10-07  D 0  1 

df['Minor'] = df[cols].max(axis=1) 
df = df.drop(cols, axis=1) 
print (df) 
     Date event A Minor 
0 2015-10-01  A 1  0 
1 2015-10-02 A|B 1  1 
2 2015-11-01 C|D 0  1 
3 2015-10-07  D 0  1 
2

Использование assign + drop

cols = list('BCD') 
df.assign(Minor=df[cols].sum(1)).drop(cols, 1) 

     Date event A Minor 
0 2015-10-01  A 1  0 
1 2015-10-02 A|B 1  1 
2 2015-11-01  C 0  1 
3 2015-10-07  D 0  1 
Смежные вопросы