Создание нового столбца DataFrame из применения функции к нескольким столбцам в группе.Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Создание нового столбца DataFrame из применения функции к нескольким столбцам в группе.

Сообщение Anonymous »

У меня есть DataFrame с данными о численности населения по комбинации категориальных демографических характеристик и дат, с некоторыми пропущенными значениями (одинаковыми для всех комбинаций) на каждую дату, что представляет собой пробелы в данных.
Я попытка:

[*]группировать по всем демографическим признакам
[*]применить функцию к каждому временному ряду подсчета населения по демографической группе (для этого требуется манипулировать как столбцом даты, так и столбцом населения)
[*]создать новый столбец в исходном (несгруппированном) DataFrame на основе этой функции

Функция в (2) воздействует на существующий столбец населения с отсутствующими значениями, перераспределяя подсчеты после разрыва назад по пробелу. Я считаю, что функция работает так, как задумано, но я изо всех сил пытаюсь встроить ее в контекст группировки и превратить в новый столбец в DataFrame.
Вот пример данных:

Код: Выделить всё

          age          race     gender         date       population
0       15-24          AAPI       Male   2020-01-01              1.0
1       15-24          AAPI       Male   2020-01-02              2.0
2       15-24          AAPI       Male   2020-01-03              2.0
...
7       15-24         Black     Female   2020-01-01              0.0
8       15-24         Black     Female   2020-01-02              NaN
9       15-24         Black     Female   2020-01-03              3.0
Для приведенного выше тривиального примера желаемый результат будет следующим:

Код: Выделить всё

          age          race     gender         date       population   interpolated
0       15-24          AAPI       Male   2020-01-01              1.0            1.0
1       15-24          AAPI       Male   2020-01-02              2.0            2.0
2       15-24          AAPI       Male   2020-01-03              2.0            2.0
...
7       15-24         Black     Female   2020-01-01              0.0            0.0
8       15-24         Black     Female   2020-01-02              NaN            1.5
9       15-24         Black     Female   2020-01-03              3.0            1.5
Я создал следующую функцию, которая принимает входной список промежутков между датами:

Код: Выделить всё

gaps = [
{
"gap": [2020-01-02],
"day_after": 2020-01-03,
}
]

def bfill_pop(gaps, group):
for el in gaps:
fill_val = group.loc[group["date"] == el["day_after"], "Admissions"] / (
len(el["gap"]) + 1
)
group.loc[group["date"].isin(el["gap"]), "population"] = fill_val
group.loc[group["date"] == el["day_after"], "population"] = fill_val
return group.rename(columns={"population": "interpolated"})["interpolated"]
Когда я пытаюсь применить это к DataFrame с помощью функций apply() или Transform(), я получаю ошибки, например:

Код: Выделить всё

df["interpolated"] = df.groupby(["age", "race", "gender"]).apply(
lambda g: bfill_pop(gaps, g)
)

Код: Выделить всё

> ValueError: cannot handle a non-unique multi-index!
Есть ли способ сделать это с помощью функций применения или преобразования?

Подробнее здесь: https://stackoverflow.com/questions/784 ... le-columns
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»