У меня есть проблема, близкая к этой:
(панды) Создать новый столбец на основе первого элемента в объекте groupby
Итак, у меня есть этот фрейм данных:
accidentID cartype
0 58 70
1 58 -70
2 58 70
3 58 100
4 71 100
5 71 -70
6 250 70
7 250 70
8 250 100
9 250 70
10 70 70
Я хочу добавить новый столбец, чтобы показать car_in_the_wrong для данного идентификатора аварии, зная, что:
Если присутствует cartype = -70 --> car_in_the_wrong = -70
Если присутствует cartype = 100 и нет cartype = -70 --> car_in_the_wrong = 100
Если 100 и -70 отсутствуют --> car_in_the_wrong = 70
accidentID cartype car_in_the_wrong
0 58 70 -70
1 58 -70 -70
2 58 70 -70
3 58 100 -70
4 71 100 -70
5 71 -70 -70
6 250 70 100
7 250 70 100
8 250 100 100
9 250 70 100
10 300 70 70
Есть ли способ сделать это с помощью группы?
Большое спасибо!
Следуя этому ответу о том, как Проверить, существует ли значение, используя несколько условий в группе в пандах, и воспользовавшись тем, что операторы с or оцениваются слева направо (т. е. правая часть не оценивается, если левая часть Справедливо):
df['car_in_the_wrong'] = df['accidentID'].map(df.groupby('accidentID').apply(lambda x: x['cartype'].eq(-70).any()*-70 or x['cartype'].eq(100).any()*100 or x['cartype'].eq(70).any()*70))
Жаль действительно не совпало. Теперь, надеюсь, стало понятнее. Спасибо