У меня есть такие данные:
Вход
>>> import pandas as pd
>>> df.head(8)
date id count
01.02.2020 a 5
01.02.2020 b 10
02.02.2020 a 6
02.02.2020 b 11
03.02.2020 a 9
03.02.2020 a 13
03.02.2020 b 3
03.02.2020 b 5
...
Желаемый результат
date distinctAverage
01.02.2020 7.5
02.02.2020 8.5
03.02.2020 15 # (9+13+3+5)/2, because 2 distinct entries out of 4 entries
...
Функция
Я хочу вычислить уникальное среднее значение "count"
для уникальных идентификаторов в выражении groupby. Я группирую данные следующим образом:
df.groupby(
["date"]
).agg(
#sumCount=("count", "sum"), # works!
#countUniqueIDs=("id", lambda x: x.nunique()), # works!
distinctAverage=("count", lambda x, y=df["id"]: x.sum() / y.nunique()), # Doesn't work!
distinctAverage2=("count", "mean") # Doesn't work, takes 4 as the denominator at 03.02.2020
).reset_index()
Есть идеи, как достичь sh четкого среднего?
РЕДАКТИРОВАТЬ: Ответ: Отдельное среднее значение, как упомянуто выше, отлично подходит для образца данные. В большем наборе данных, который не может быть отображен здесь, он не работает (по какой-либо причине!), И есть обходной путь: после использования groupby и агрегирования "sumCount"
и "countUniqueIDs"
добавьте еще одну строку после groupby: df["workaroundDistinctAverage"] = df["sumCount"] / df["countUniqueIDs"]
Не очень элегантно, но легче понять, чем принятый ответ.