如何聚合特定范围内的 pandas datetimeindex 值?

发布于 2025-01-17 23:43:00 字数 1349 浏览 0 评论 0原文

我有以下问题。给定的是这个 pandas DataFrame

df = pd.DataFrame({
    'Dates': pd.to_datetime(['2022-04-15','2022-05-15','2022-06-15','2022-07-15',
                             '2022-08-15','2022-09-15','2023-10-15']),
    'Values': [100,150,200,150,100,250,100]
})

    Dates       Values
0   2022-04-15  100
1   2022-05-15  150
2   2022-06-15  200
3   2022-07-15  150
4   2022-08-15  100
5   2022-09-15  250
6   2023-10-15  100

现在我不想将 df['Values'] 累积到这个特定的日期范围

daterange1 = pd.date_range('2022-03-31','2022-04-30', freq='M')
daterange2 = pd.date_range(daterange1[-1],'2022-11-30', freq='3M')
daterange = daterange1.union(daterange2)

DatetimeIndex(['2022-03-31', '2022-04-30', '2022-07-31', '2022-10-31'], dtype='datetime64[ns]', freq=None)

分组看起来像这样:

    Dates       Values  
----------------------- 2022-03-31 Sum=0
0   2022-04-15  100
----------------------- 2022-04-30 Sum=100
1   2022-05-15  150
2   2022-06-15  200
3   2022-07-15  150
----------------------- 2022-07-31 Sum=500
4   2022-08-15  100
5   2022-09-15  250
6   2023-10-15  100
----------------------- 2022-10-31 Sum=450

这应该是结果:

    Dates       Values
0   2022-03-31  0
1   2022-04-30  100
2   2022-07-31  500
3   2022-10-31  450

有没有办法将它们分组按照这个模式?

提前致谢 :)

I have the following problem. Given is this pandas DataFrame

df = pd.DataFrame({
    'Dates': pd.to_datetime(['2022-04-15','2022-05-15','2022-06-15','2022-07-15',
                             '2022-08-15','2022-09-15','2023-10-15']),
    'Values': [100,150,200,150,100,250,100]
})

    Dates       Values
0   2022-04-15  100
1   2022-05-15  150
2   2022-06-15  200
3   2022-07-15  150
4   2022-08-15  100
5   2022-09-15  250
6   2023-10-15  100

Now I wan't to accumulate df['Values'] into this specific date range

daterange1 = pd.date_range('2022-03-31','2022-04-30', freq='M')
daterange2 = pd.date_range(daterange1[-1],'2022-11-30', freq='3M')
daterange = daterange1.union(daterange2)

DatetimeIndex(['2022-03-31', '2022-04-30', '2022-07-31', '2022-10-31'], dtype='datetime64[ns]', freq=None)

A grouping would look like this:

    Dates       Values  
----------------------- 2022-03-31 Sum=0
0   2022-04-15  100
----------------------- 2022-04-30 Sum=100
1   2022-05-15  150
2   2022-06-15  200
3   2022-07-15  150
----------------------- 2022-07-31 Sum=500
4   2022-08-15  100
5   2022-09-15  250
6   2023-10-15  100
----------------------- 2022-10-31 Sum=450

This should be the result:

    Dates       Values
0   2022-03-31  0
1   2022-04-30  100
2   2022-07-31  500
3   2022-10-31  450

Is there a way to group them according to this pattern?

Thanks in advance :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

飘落散花 2025-01-24 23:43:00

您可以使用剪切检查

out = df.groupby(pd.cut(df.Dates,daterange.union([pd.to_datetime('2022-02-28')]),labels = daterange)).sum() #.reset_index()
Out[376]: 
                     Values
Dates                      
2022-03-31 00:00:00       0
2022-04-30 00:00:00     100
2022-07-31 00:00:00     500
2022-10-31 00:00:00     350

You can check with cut

out = df.groupby(pd.cut(df.Dates,daterange.union([pd.to_datetime('2022-02-28')]),labels = daterange)).sum() #.reset_index()
Out[376]: 
                     Values
Dates                      
2022-03-31 00:00:00       0
2022-04-30 00:00:00     100
2022-07-31 00:00:00     500
2022-10-31 00:00:00     350
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文