test = pd.DataFrame({'injury':['A', 'B', 'B', 'A', 'A', 'C', 'A', 'B', 'A'], 'crash_drinking':[1, 1, 1, 0, 0, 0, 1, 0, 1], 'crash_drugs':[0,0,0,1,1,0,0,1,1], 'driver_drinking':[1,1,0,0,0,0,0,1,0], 'driver_drugged':[0,0,0,0,1,0,0,1,0]})
crash_drinking crash_drugs driver_drinking driver_drugged injury
0 1 0 1 0 A
1 1 0 1 0 B
2 1 0 0 0 B
3 0 1 0 0 A
4 0 1 0 1 A
5 0 0 0 0 C
6 1 0 0 0 A
7 0 1 1 1 B
8 1 1 0 0 A
Я хочу, чтобы мой выход выглядеть примерно так (имена столбцов заменяются, чтобы дифференцировать их от выше dataframe):панды: сложный фильтр через GroupBy
drinking crash drinking driver in crash drugged crash drugged driver in crash
A 2 1 2 1
B 2 1 1 0
Где в первом ряду, "injury" = 'A'
, и имеются следующие фильтры:
«Питьевая авария» - это счет, где crash_drinking = 1
и crash_drugs = 0
;
"питьевой водитель в аварийном состоянии" находится в тех случаях, когда crash_drinking = 1
, crash_drugs = 0
, driver_drinking = 1,
и driver_drugs is 0
;
«наркотики аварии», где crash_drinking = 0
и crash_drugs = 1;
«наркотического опьянения водителя в аварии», где crash_drinking = 0
, crash_drugs = 1
, driver_drinking = 0,
и driver_drugs = 1
.
же для ряда В, за исключением того, где "injury" = 'B'.
Прямо сейчас я просто куча .loc фильтров настройки:
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0)]
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 0) & (test['crash_drugs'] == 1)]
test.loc[(test['injury'] == 'A') & (test['crash_drinking'] == 1) & (test['crash_drugs'] == 0) & (test['driver_drinking'] == 1) & (test['driver_drugged'] == 0)]
Etc.
я предпочел бы сделать это через groupby или .apply(), поскольку я думаю, что это было бы быстрее, чем цикл через все эти запросы. Но я не уверен в правильном синтаксисе. Может быть, я должен сделать .groupby() в столбце «Урон» и пойти оттуда ...?
Вашего определение dataframe не соответствует его представлению (имена столбцов различны). –
Вы имеете в виду, что столбцы в моем желаемом выходе отличаются от столбцов? Новые столбцы не совпадают с исходными столбцами, они представляют собой комбинацию столбцов, поэтому я хотел их отличить. Я могу изменить их, но я думал, что это будет более запутанным, если они будут одинаковыми. – ale19
Нет, взгляните на первую строку кода и данные, которые печатаются сразу после этого. У них разные имена столбцов, что сбивает с толку. –