#python #pandas #dataframe #pandas-groupby
Вопрос:
Входной кадр данных
-------------------------------
|ID Owns_car owns_bike|
-------------------------------
| 1 1 0 |
| 5 1 0 |
| 7 0 1 |
| 1 1 0 |
| 4 1 0 |
| 5 0 1 |
| 7 0 1 |
-------------------------------
Expected Output:
------------------------------
|ID Owns_car owns_bike|
------------------------------
| 1 1 0 |
| 5 1 1 |
| 7 0 1 |
| 4 1 0 |
------------------------------
Группировка по идентификатору, а затем выбор значения «1» вместо 0 для других столбцов. Проверка, есть ли у человека для данного удостоверения личности автомобиль и велосипед
Ответ №1:
Вы можете использовать » max » после вашей группы, чтобы выбрать максимальное значение (которое предпочтет 1 вместо 0).
df = pd.DataFrame({'ID': [1, 5, 7, 1, 4, 5, 7],
'Owns_car': [1, 1, 0, 1, 1, 0, 0],
'owns_bike': [0, 0, 1, 0, 0, 1, 1]})
df.groupby('ID').max().reset_index()
Комментарии:
1. Эй, @edhaussy спасибо за ответ, но что, если наряду с вышеупомянутыми есть и другие столбцы, и я хочу, чтобы эти другие столбцы были такими, как есть, без применения операции «макс». Есть идеи о том, как этого достичь??
2. вы можете использовать функцию » agg » для применения различных операций для каждого столбца, который вы хотите сохранить
df.groupby('ID').agg({'Owns_car': 'max', 'owns_bike': 'max'})
3. Что делать, если я хочу сохранить другой столбец таким, какой он есть, без применения каких-либо операций, как сохранить столбец таким образом?
Ответ №2:
Используйте transform
с max
, а затем удаляйте дубликаты с помощью ID
df[['Owns_car', 'owns_bike']] = df.groupby('ID')[['Owns_car', 'owns_bike']].transform('max')
df = df.drop_duplicates('ID')