假设我有一个数据集,由每月、每季度和每年平均发生的事件组成:

multi_index = pd.MultiIndex.from_tuples([("2022-01-01", "2022-12-31"), 
                                  ("2022-01-01", "2022-03-30"), 
                                  ("2022-03-01", "2022-03-30"),
                                  ("2022-04-01", "2022-04-30")])

multi_index.names = ['period_begin', 'period_end']

df = pd.DataFrame(np.random.randint(10, size=4), index=multi_index)
df

                         0
period_begin period_end   
2022-01-01   2022-12-31  4
             2022-03-30  3
2022-03-01   2022-03-30  5
2022-04-01   2022-04-30  8

我想将每月平均数计算为这些重叠数据的(简单)总和.例如,2022年3月的平均值应等于2022年3月、2022年1月和2022年Y月的观测值之和.对于2022年4月,这是2022年4月和2022年Y月的总和(2022年第2季度没有出现,也没有观察到).最后,我想要的是:

month_begin  Monthly_Avg                    
2022-01-01   7
2022-02-01   7
2022-03-01   12
2022-04-01   15
...
2022-12-01   4

我试了pd.Grouper()次,但没有成功.有人有主意吗?我将不胜感激!

推荐答案

在月值列表理解中使用date_range,创建数据框并聚合sum:

L = [(x, v) for (s, e), v in df[0].items() for x in pd.`(s, e, freq='MS')]

df = (pd.DataFrame(L, columns=['month_begin','Data'])
        .groupby('month_begin', as_index=False)['Data']
        .sum())
print (df)
   month_begin  Data
0   2022-01-01     7
1   2022-02-01     7
2   2022-03-01    12
3   2022-04-01    12
4   2022-05-01     4
5   2022-06-01     4
6   2022-07-01     4
7   2022-08-01     4
8   2022-09-01     4
9   2022-10-01     4
10  2022-11-01     4
11  2022-12-01     4

Python相关问答推荐

基于Scipy插值法的三次样条系数

为什么我的sundaram筛这么低效

为什么Python内存中的列表大小与文档不匹配?

比Pandas 更好的 Select

需要帮助使用Python中的Google的People API更新联系人的多个字段'

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

Django在一个不是ForeignKey的字段上加入'

如果不使用. to_list()[0],我如何从一个pandas DataFrame中获取一个值?

Django抛出重复的键值违反唯一约束错误

在MongoDB文档中仅返回数组字段

使用Scikit的ValueError-了解

Pandas ,快速从词典栏中提取信息到新栏

生产者/消费者-Queue.get by list

torch 二维张量与三维张量欧氏距离的计算

为什么Python多处理.Process()传递队列参数并且读取比函数传递队列参数和读取更快?

Python渐进式打字

如何将多列转换为行

命令输出在终端上打印,并且stdout为空.如何存储输出或重定向到标准输出?

匹配+字符串的Python RegEx,直到找到下一个匹配项

如何用绘图仪绘制地球轨道图?