Возможно, вы забыли использовать скобки при расчете средневзвешенного значения:
> 0.93=[(0.939531370722655*3) +(0.951619897215127*2)+(1*0.952681914218488)]/(3+2+1)
Также попробуйте использовать сводную таблицу на "Value"
с пользовательской функцией агрегирования:
def func(series) :
s = series.sort_values().reset_index(drop=True).reset_index()
return s.apply(lambda x : (len(s) - x["index"]) * x["Value"] /sum(np.arange(1, len(s) + 1)), axis=1).sum()
Вышеприведенная функция вычисляет средневзвешенное значение для ряда панд:
- Сначала вы сортируете значения и сбрасываете индекс в порядке сортировки.
- Затем вычисляете средневзвешенное значение.
Эта функция агрегации затем вызывается следующим образом:
df1 = df.pivot_table(index="Date", columns="Source", aggfunc={"values" : func})
, которая возвращает:
+----------+----------+----------+----------+---------+----------+
| | Value | | | | |
+----------+----------+----------+----------+---------+----------+
| Source | Source1 | Source2 | Source3 | Source4 | Source5 |
| Date | | | | | |
+----------+----------+----------+----------+---------+----------+
| 3/1/2018 | 0.945753 | 0.958896 | 0.963069 | 0.96348 | NaN |
| 3/2/2018 | NaN | NaN | NaN | NaN | 0.955507 |
+----------+----------+----------+----------+---------+----------+
Затем для параметра Total_Result:
df2 = df.pivot_table(index="Date", values="Result", aggfunc="mean")
Возвращает
+----------+----------+
| | Result |
+----------+----------+
| Date | |
| 3/1/2018 | 0.714286 |
| 3/2/2018 | 0.857143 |
+----------+----------+
Наконец, вы можете объединить два своих фрейма данных, чтобы получить желаемый фрейм данных:
df1.columns = df1.columns.droplevel()
df2.columns = ["Overall_Result" ]
dfResult = pd.concat([df1, df2], axis=1)
т.е.
+----------+----------------+----------+----------+----------+---------+----------+
| | Overall_Result | Source1 | Source2 | Source3 | Source4 | Source5 |
+----------+----------------+----------+----------+----------+---------+----------+
| Date | | | | | | |
| 3/1/2018 | 0.714286 | 0.945753 | 0.958896 | 0.963069 | 0.96348 | NaN |
| 3/2/2018 | 0.857143 | NaN | NaN | NaN | NaN | 0.955507 |
+----------+----------------+----------+----------+----------+---------+----------+