如何在Python3.6中将日期分为几周并创建一个新列表?

2024-06-03 12:55:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据列表一个是日期和平均值,另一个是索引和另一个值,它们看起来像:

#list 1: (in total 62 raws)
date      d_mean
2017-3-1  15.3
2017-3-2  16.9
2017-3-3  18.2
...
2017-4-30 17.7
2017-5-1  15.6

#list2: (in total 10 raws)
     sum
121  555
122  784
123  546
...
142  568
143  658
144  847

我想:

  1. 把日期分成几周
  2. 计算每周的平均值,并创建一个新列表,其中列有“week”和“w”mean
  3. 使这两个列表大小相同,然后将它们相互对照

我试着用

^{pr2}$

但这只是划分了名单,我试图补充

    .mean()

最后,也没用。在

我是Python新手,我也很高兴听到有没有必要的资料需要我去阅读或练习,以帮助我习惯使用Python。在


Tags: 数据in列表datemeanlist平均值total
2条回答

我不太清楚你的问题,但第一部分的答案应该是

df = df.set_index('date')
df['w_mean'] = df.resample('w').d_mean.mean(). 

这是数据帧每周的平均值(我认为您调用的是列表)。在

我不知道你怎么能使这两个列表的长度相同,因为它们在同一时间段处于不同的频率。在

你将得到一个列('w'u mean'),它每七天有一个值,其他地方都是nan。在

你能做的df.interpolate().plot()是我能想到的最接近的事情。。。在

没有原始数据很难回答,但是您可以将^{}与自定义函数一起使用:或者使用index / 7或使用{a2}来获取周数:

import pandas as pd
import datetime
import numpy as np
start = datetime.datetime(2017,3,1)
end = datetime.datetime(2017,5,2)
daterange = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]
data = pd.DataFrame({'date':daterange, 'v':np.random.randint(0,100,size=len(daterange))}).set_index('date')

data现在看起来像:

^{pr2}$

以下是strftime的结果:

>>> data.groupby(lambda d: d.strftime('%V')).mean()
            v
09  30.800000
10  66.428571
11  36.285714
12  40.857143
13  55.428571
14  56.285714
15  52.000000
16  39.714286
17  39.714286

以下是day of year / 7的结果:

>>> data.groupby(lambda d: d.timetuple().tm_yday//7).mean()
            v
8   30.000000
9   65.428571
10  33.285714
11  48.857143
12  46.571429
13  58.000000
14  47.428571
15  41.428571
16  45.285714
17  33.500000

这取决于你如何定义一周。在

请注意,如果数据跨度超过一年,它将不起作用。您可能应该使用resample,正如@RSHAP所提到的那样。在

相关问题 更多 >