#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, используя разные функции для разных столбцов, подобных этому — это будет полезно для меня в будущем для других задач. Спасибо!