Сгруппируйте по столбцу и выберите конкретное значение из другого столбца в фрейме данных pandas

#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')