У меня есть два больших многоиндексных Dataframes, оба выглядят примерно так:
2000 2001 2002 2003 ...
Area AreaCode Item Unit Code
A A1 one j 00 val val val val
two k 01 val val val val
three k 10 val val val val
B B1 one j 00 val val val val
two k 01 val val val val
three k 10 val val val val
four k 10 val val val val
C C1 one j 00 val val val val
two k 01 val val val val
three k 10 val val val val
, где все val
просто плавающие.
Я хочу умножить каждое значение на df1
на соответствующее значение в df2
, деленное на np.sum(df2.xs("one", level = "Item"), axis = 1)
перед использованием .mean()
, что даст мне взвешенное среднее. Что-то вроде:
for area in df1.index.get_level_values("Area"):
df1[area] = (df1[area] * df2.xs("one", level = "Item").xs(area, level = "Area").values) \
/ np.sum(df2.xs("one", level = "Item"), axis = 1)
В моих реальных данных, df1
и df2
имеют одинаковое количество столбцов. df1
содержит данные на душу населения, а df2.xs("one", level = "Item")
- данные о временных рядах для каждого Area
.
. Если есть простой способ сделать это с помощью .mean()
, я не смог бы найти тот, который позволял бы взвешенное среднее.
Я также пытался использовать df1.multiply(df2.xs("one", level = "Item").xs(area, level = "Area"), level = "Area")
, но получаю TypeError: cannot align on a multi-index with out specifying the join levels
.
Я не привязан к этому методу; если есть простой способ получить взвешенное среднее с помощью .mean()
, я бы с радостью использовал его.