如何根据周分离python系列中的数据以将它们绘制在周期图中?

我在一个带有日期和时间的系列中有五周的季节性数据,我如何根据周数将其分开,例如第 1 周、第 2 周...第 5 周,以便我可以在同一张图中绘制所有周数据。


我尝试通过找到平均值来重新采样数据。但数据仍然是单系列。我只想在不同的数据框中根据 2019-04-02 到 2019-04-08、2019-04-08 到 2019-04-16 等周在单独的 df 中分离数据


df.open.resample('M').mean()

date    pageload  day

0     2019-04-02 10:48:00  -79.002023  Tue

1     2019-04-02 10:49:00   33.563679  Tue

2     2019-04-02 10:50:00  -76.448319  Tue

3     2019-04-02 10:51:00   30.974816  Tue

4     2019-04-02 10:52:00  -68.789962  Tue

5     2019-04-02 10:53:00   30.593374  Tue

21    2019-04-16 11:34:00   40.333445  Fri

数据框按周分开。在单个图表中绘制所有周数据。


不负相思意
浏览 209回答 2
2回答

慕容森

我不认为你想像 Shijith 展示的那样重新采样。我认为您每周都需要不同的数据框。IMO 您想为此使用groupby ( doc )。Pandas Groupby函数可用于按列或索引拆分数据框中的数据。该方法返回一个 pandas groupby 对象,该对象可用于在将组合并回来之前对组执行操作。在代码片段中,我首先创建一个列来对数据进行分组(即“周”列)。比我按周列对数据进行分组。这将创建一个 groupby 对象,其中包括一个字典,该字典具有“weeks”列的唯一值作为键和数据帧的索引列表,这些索引列表具有与“weeks”列相同的值作为值。这可以通过print(grps.groups)在控制台中输入来查看。然后我遍历组的键,并通过调用get_groupgroupby 对象上的方法将每周数据帧添加到字典中。import pandas as pd# Make sample dataindex=pd.date_range(start='2014-01-01', end='2014-1-31',freq='D')df = pd.DataFrame({"vals":np.random.randint(-5,5,len(index))}, index=index)df["csum"] = df.vals.cumsum()# Add a column for weeks to enable groupingdf["weeks"] = df.index.week# Group the datagrps = df.groupby("weeks")# split the group into separate dataframesdf_dict = {}for gi in grps.groups:    df_dict[gi] = grps.get_group(gi)我从这样的事情开始:            vals  csum  weeks2014-01-01     4     4      12014-01-02    -5    -1      1...2014-01-30    -2    -9      52014-01-31    -5   -14      5最终得到如下数据框1            vals  csum  weeks2014-01-01     4     4      12014-01-02    -5    -1      12014-01-03    -4    -5      12014-01-04     4    -1      12014-01-05    -5    -6      12            vals  csum  weeks2014-01-06    -5   -11      22014-01-07     2    -9      22014-01-08     4    -5      22014-01-09    -1    -6      22014-01-10    -1    -7      22014-01-11    -3   -10      22014-01-12    -2   -12      2

子衿沉夜

如果您的数据框df按日期编入索引   print(df)                 High         Low        Open       Close    Volume   Adj CloseDate                                                                            2019-04-01  191.679993  188.380005  191.639999  191.240005  27862000  191.2400052019-04-02  194.460007  191.050003  191.089996  194.020004  22765700  194.0200042019-04-03  196.500000  193.149994  193.250000  195.350006  23271800  195.3500062019-04-04  196.369995  193.139999  194.789993  195.690002  19114300  195.6900022019-04-05  197.100006  195.929993  196.449997  197.000000  18526600  197.0000002019-04-08  200.229996  196.339996  196.419998  200.100006  25881700  200.1000062019-04-09  202.850006  199.229996  200.320007  199.500000  35768200  199.5000002019-04-10  200.740005  198.179993  198.679993  200.619995  21695300  200.6199952019-04-11  201.000000  198.440002  200.850006  198.949997  20900800  198.9499972019-04-12  200.139999  196.210007  199.199997  198.869995  27760700  198.869995做,weekly_summary = pd.DataFrame()weekly_summary['Open'] = df.open.resample('W').first()print(weekly_summary)                    OpenDate                  2019-04-07  191.6399992019-04-14  196.419998如果它没有按日期时间编入索引,df['Date'] = pd.to_datetime(df['Date'])df.set_index('Date', inplace=True)df.sort_index(inplace=True)weekly_summary = pd.DataFrame()weekly_summary['Open'] = df.open.resample('W').first()  对于上面的代码数据框将在 'sundays' 进行索引,如果您希望它在 'Mondays' (即一周的开始日期)进行索引,请执行以下操作。weekly_summary = pd.DataFrame()weekly_summary['Open'] = df.open.resample('W',loffset=pd.offsets.timedelta(days=-6)).first()print(weekly_summary)                    OpenDate                  2019-04-01  191.6399992019-04-08  196.419998
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python