python根据时间序列画折线图_python-根据开始和结束日期对时间序列数据进行分组...

这篇博客介绍了如何使用pandas的`pd.Grouper`函数,结合'AS-AUG'频率参数,将含有日期的数据框按每年的8月至次年的7月的季节进行分组。这使得数据可以被有效地用于按季节进行的分析和可视化。通过提供示例代码,展示了如何将日期字符串转换为日期类型,并进行分组操作,最后展示分组后的结果。
摘要由CSDN通过智能技术生成

我有每年一次体育比赛的时间序列数据,其中包含每场比赛的日期.我想按游戏的季节(年)对游戏进行分组.每个季节都从8月开始,到7月结束.

我将如何按季节对游戏进行分组,例如-

季节(2016-2017),季节(2017-2018)等.

涉及df.resample()的This Answer可能是相关的,但是我不确定如何去做.

日期列如下所示:

DATE

26/09/09

04/10/09

17/10/09

25/10/09

31/10/09

...

29/09/18

07/10/18

28/10/18

03/11/18

我想按季节分组,以便可以对汇总数据执行可视化操作.

更新:目前我的解决方案是将数据帧分为32组,因为我知道每个赛季都有32场比赛.这是我使用的代码:

split_df = np.array_split(df, np.arange(0, len(df),32))

但是,我宁愿选择更优雅,更包含时间序列数据的内容,因此我将继续讨论这个问题.

解决方法:

成功的关键是适当的分组,在您的情况下为pd.Grouper(key =’DATA’,freq =’AS-AUG’).

请注意,freq =’AS-AUG’指出您的群组应从

每年八月.

看下面的脚本:

import pandas as pd

# Source columns

dates = [ '01/04/09', '31/07/09', '01/08/09', '26/09/09', '04/10/09', '17/12/09',

'25/01/10', '20/04/10', '31/07/10', '01/08/10', '28/10/10', '03/11/10',

'25/12/10', '20/04/11', '31/07/11' ]

scores_x = np.random.randint(0, 20, len(dates))

scores_y = np.random.randint(0, 20, len(dates))

# Source DataFrame

df = pd.DataFrame({'DATA': dates, 'SCORE_X': scores_x, 'SCORE_Y': scores_y})

# Convert string date to datetime

df.DATA = pd.to_datetime(df.DATA, format='%d/%m/%y')

# Groupping

gr = df.groupby(pd.Grouper(key='DATA', freq='AS-AUG'))

如果您打印结果:

for name, group in gr:

print()

print(name)

print(group)

你会得到:

2008-08-01 00:00:00

DATA SCORE_X SCORE_Y

0 2009-04-01 16 11

1 2009-07-31 10 7

2009-08-01 00:00:00

DATA SCORE_X SCORE_Y

2 2009-08-01 19 6

3 2009-09-26 14 5

4 2009-10-04 8 11

5 2009-12-17 12 19

6 2010-01-25 0 0

7 2010-04-20 17 6

8 2010-07-31 18 2

2010-08-01 00:00:00

DATA SCORE_X SCORE_Y

9 2010-08-01 15 18

10 2010-10-28 2 4

11 2010-11-03 8 16

12 2010-12-25 13 1

13 2011-04-20 19 7

14 2011-07-31 8 3

如您所见,每个组仅在8月1日开始,并在8月1日结束

7月31日.

您可以随心所欲地与您的小组一起做.

标签:pandas,python

来源: https://codeday.me/bug/20191024/1923762.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值