【发布时间】:2021-11-17 14:43:32
【问题描述】:
我有一个包含四个时间序列的 DataFrame df1。我想基于 DataFrame groups 聚合这些时间序列,它将单个时间序列分为两组。此外,我有一个 DataFrame weights,它定义了组内时间序列的加权因子(随时间变化)。
我试图得到的是一个 DataFrame df2,它具有基于组聚合的时间序列并使用权重因子进行加权。
这是一个简单的例子:
import pandas as pd
df1 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[1.2, 2.3, 0.3, 0.5],
'02K W':[3.5, 0.1, 'nan', 'nan'],
'03K W':[4.2, 5.2, 2.5, 3.0],
'04K W':[1.5, 2.6, 8.2, 4.2]})
groups = pd.DataFrame({
'ID':['01K W', '02K W', '03K W', '04K W'],
'Group':['Group1', 'Group1', 'Group2', 'Group1']})
weights = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'01K W':[0.5, 0.5, 0.25, 0.5],
'02K W':[0.25, 0.25, 'nan', 'nan'],
'03K W':[1, 1, 1, 1],
'04K W':[0.25, 0.25, 0.75, 0.5]})
df2 = pd.DataFrame({
'Date':['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04'],
'Group1':[1.85, 1.82, 6.23, 2.35],
'Group2':[4.2, 5.2, 2.5, 3.0]})
df2 (=1.85) 中的第一个元素计算为:
1.2x0.5 + 3.5x0.25 + 1.5x0.25
第 1 组的值:1.2、3.5 和 1.5('2021-01-01')
第 1 组的加权因子:0.5、0.25 和 0.25('2021-01-01')
【问题讨论】:
-
您似乎没有指定当agroup对应多行时,每个项目将如何计算为匹配项目的行的聚合。
-
如果一个组对应于多行,例如“Group1”,那么我会尝试根据 Dataframe 权重中特定时间的各个权重进行聚合。
-
在您的描述中,权重与日期维度(即“日期”)相关,而不是与组行相关。您应该提供对 df2 进行的计算的详细信息。
-
我认为这很清楚。 df2 1.85 中的第一个值计算为:1.2*0.5 + 3.5*0.25 + 1.5*0.25。第 1 组从 3 列获取数据,这些列乘以 3 个权重并相加
-
是的,这正是我尝试的方式。我在上面添加了。
标签: python pandas dataframe aggregate weighted-average