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

#python #pandas

#питон #панды

Вопрос:

ID Проверка 1 Проверка 2 Ценность
1 Y 1
1 Y Y 2
2 Y 5
2 8

У меня есть фрейм данных, аналогичный приведенной выше таблице. Мне нужно найти способ свернуть таблицу так, чтобы у меня была только одна строка для каждого идентификатора, а столбец Значение содержал минимальное значение для этого идентификатора.

Я могу сделать это с помощью:

 df = df.fillna('') df.groupby(['ID'],as_index=False).min()  

Однако мне также нужно сохранить любое из значений » Y » в моих двух контрольных столбцах, чтобы Y всегда имел приоритет и заполнял любые нулевые значения в строке с тем же идентификатором. Итак, основываясь на приведенной выше таблице, результат, который я ищу, будет таким:

ID Проверка 1 Проверка 2 Ценность
1 Y Y 1
2 Y 5

Что я вижу до сих пор, так это то, что у меня останутся пробелы в столбце «Проверка 1» вместо значения Y. Есть какие-нибудь идеи о том, как это сделать?

Ответ №1:

Если вы sort_values использовали столбец «Значение» раньше groupby , вы можете просто сохранить first допустимую строку для всех столбцов:

 gt;gt;gt; df.sort_values("Value").groupby("ID").first().fillna('')  Check 1 Check 2 Value ID  1 Y Y 1 2 Y 5  

Комментарии:

1. Этот в итоге работал на меня, большое спасибо за помощь.

2. @Koelker12 — Рад помочь! 🙂

Ответ №2:

Сгруппируйте фрейм данных по ID , затем передайте min как агрегат для Value столбца и first как агрегат для остальных столбцов.

 gt;gt;gt; df.groupby('ID').agg({'Check 1': 'first', 'Check 2':'first', 'Value': 'min'})    Check 1 Check 2 Value ID  1 Y Y 1 2 None Y 5  

Комментарии:

1. Я ценю ваш ответ. Однако я не мог заставить это работать совершенно правильно. Это исправило проблему с проверкой столбца 1, но затем отбросило все мои значения из проверки 2. Возможно, это ошибка пользователя с моей стороны, но в итоге я заставил его работать, используя другой метод из not_speshal. Я не понимал, что могу использовать .agg, используя разные функции для разных столбцов, подобных этому — это будет полезно для меня в будущем для других задач. Спасибо!