Проблема, когда я группирую и заполняю na минимальным значением даты сгруппированным элементом

Это мой набор данных, и я пытаюсь заполнить столбцы дат, содержащие NaN, минимальным значением.

Я пытаюсь заполнить NaN в столбцах даты минимальным значением из этого столбца даты для ag_id (элемент, сгруппированный по). Когда я делаю следующее, я получаю неожиданный результат.

df_test_revenue_1["1st_rev_month"] = df_test_revenue_1.groupby("ag_id").transform(lambda x: x.fillna(x.min()))

Неожиданный результат выполнения вышеуказанного:

введите здесь описание изображения

Я ожидал, что все значения столбца 1st_rev_month будут 2017-10-01. Вместо этого похоже, что он выбирает значения для 1st_rev_month из столбца revenue_month

Моя конечная цель - получить этот результат (примените ту же логику к остальным столбцам даты (кроме столбца revenue_month введите здесь описание изображения


person zoomi    schedule 13.07.2020    source источник
comment
публиковать текст, а не снимки экрана: stackoverflow.com/questions/20109391/   -  person Paul H    schedule 13.07.2020


Ответы (1)


Ваш код:

df_test_revenue_1.groupby("ag_id").transform(lambda x: x.fillna(x.min()))

никогда не обращайтесь к столбцу 1st_rev_month. ваша ссылка на него с левой стороны означает, что результат помещается в столбец 1st_rev_month. Но что такое результат? это минимум для всего фрейма данных, а не только для 1st_rev_month.

Минимум нужно брать только по столбцу 1st_rev_month.

Исправление:

df_test_revenue_1["1st_rev_month"]=df_test_revenue_1.groupby("ag_id")['1st_rev_month'].transform(lambda x: x.fillna(x.min()))

добавление ['1st_rev_month'] после groupby, чтобы взять только соответствующий столбец

person Roim    schedule 13.07.2020