如何在Python 3.6中将日期划分为周并创建新列表?

如何在Python 3.6中将日期划分为周并创建新列表?,python,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

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

#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
我想:

  • 把日期分成几周
  • 计算每周的平均值,并创建一个列为“week”和“w_mean”的新列表
  • 使这两个列表的大小相同,然后将它们相互绘制
  • 我试着用

        chunks = [avg_T1[x:x+7] for x in range(4, len(avg_T1), 7)]
    
    但这只是划分了列表,我试图添加

        .mean()
    
    最后,它并没有真正起作用


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

    没有原始数据很难回答,但你可以使用自定义函数:要么
    index/7
    要么使用以获取周数:

    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')
    
    数据
    现在看起来像:

                 v
    date          
    2017-03-01   1
    2017-03-02  40
    2017-03-03  49
    2017-03-04  27
    2017-03-05  37
    2017-03-06  90
    2017-03-07  88
    2017-03-08  42
    2017-03-09  90
    2017-03-10  84
    2017-03-11  47
    2017-03-12  24
    2017-03-13  18
    2017-03-14  24
    2017-03-15  38
    2017-03-16  71
    2017-03-17  11
    2017-03-18  40
    ...
    
    下面是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
    
    以下是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
    
    这取决于你如何定义一周


    请注意,如果数据跨度超过一年,它将不起作用。您可能应该使用。

    我不确定是否完全理解您的问题,但第一部分的答案应该是

    df = df.set_index('date')
    df['w_mean'] = df.resample('w').d_mean.mean(). 
    
    这是数据帧每周的平均值(我认为您正在调用列表)

    我不知道你如何使这两个列表长度相同,因为它们在同一时间段内的频率不同

    您将拥有一个列(“w_mean”),该列每七天有一个值,其他所有地方都有一个值


    你可以做
    df.interpolate().plot()
    是我能想到的最接近的事情…

    你有一个可复制的数据示例吗?使用pandas将日期列转换为日期时间索引和周频率,取平均值。这里唯一的危险是,如果你有超过一年的数据(看起来不像OP)它将在一年中的每一周聚集在一起(即2015年第1周将与2016年第1周以及所有其他年份合并)@RSHAP:的确如此。你的方法更好。这真的很有帮助!非常好,我不知道如何重新采样。