У меня есть фрейм данных pandas с несколькими элементами, который считается следующим образом:
Я хочу groupby
данные по элементам, агрегируя с продуктом, чтобы в итоге я получил фрейм данных, который имеет элементы в качестве индекса, счетчики в виде столбцов, а значения в ячейке i, j равны сумме item{i} * count{j}
. Например:
Я пробовал использовать groupby
:
df[items + counts].groupby(items).agg('prod')
и
df.groupby(items)[counts].agg('prod')
но проблема в том, что groupby
использует значения столбца, а не сам столбец, и я сталкиваюсь с той же проблемой с pivot_table
:
df.pivot_table(index=items, values=counts, aggfunc='prod')
Я чувствую, что решение должно быть тривиальным, но я не могу понять, чего мне не хватает.
IIUC, вы можете использовать точка предметов против количества:
# create DataFrame with only item columns
items = df.filter(regex='^item')
# create DataFrame with only count columns
counts = df.filter(regex='^count')
# compute dot product
res = items.T.dot(counts)
print(res)
Выход
count1 count2 count3
item1 40.0 20.0 40.0
item2 25.0 27.5 0.0
item3 15.0 17.5 10.0
Элементы и счетчики DataFrames получаются с использованием фильтра.
Где пункт 3?