У меня есть следующая таблица.
value category
0 2 A
1 20 B
2 4 A
3 40 B
Я хочу добавить mean
столбец, который содержит среднее значение для каждой категории.
value category mean
0 2 A 3.0
1 20 B 30.0
2 4 A 3.0
3 40 B 30.0
Я могу сделатьэто в пандах примерно так:
p = pd.DataFrame({"value":[2, 20, 4, 40], "category": ["A", "B", "A", "B"]})
groups = []
for _, group in p.groupby("category"):
group.loc[:,"mean"] = group.loc[:,"value"].mean()
groups.append(group)
pd.concat(groups).sort_index()
Как мне сделать то же самое в Dask?
Я не могу использовать функции панд как есть, потому что вы не можете перечислять по группамОбъект в Даске. Это
import dask.dataframe as dd
d = dd.from_pandas(p, chunksize=100)
list(d.groupby("category"))
повышает KeyError: 'Column not found: 0'
.
Я могу использовать функцию apply
для вычисления среднего значения в Dask.
import dask.dataframe as dd
d = dd.from_pandas(p, chunksize=100)
q = d.groupby(["category"]).apply(lambda group: group["value"].mean(), meta="object")
q.compute()
возвращает
category
A 3.0
B 30.0
dtype: float64
Но я не могу понять, как сложить их обратно в строки исходной таблицы.