Python / Pandas:按日期排序并计算两周(滚动?)平均值

时间:2017-06-20 02:52:55

标签: python python-3.x pandas

到目前为止,我已经阅读了2个CSV并根据公共元素合并它们。我获取合并后的CSV的输出并迭代它们已合并的唯一元素。当我将它们分开时,我想生成每日计数行和从当前日期开始的两周滚动平均值。我不能根据' Date Opened'现场,但我仍然需要我最近的第一个组织的输出。一旦这些按日期排序,我的每日计数绘图问题将得到纠正。我剩下的任务是计算一周内计数的两周滚动平均值。我已经查看了Pandas文档,我认为rolling_mean会起作用,但这个函数的参数对我来说真的没有用。我试过biwk_avg = pd.rolling_mean(open_dt, 28),但似乎没有用。我知道有一种更简单的方法可以做到这一点,但我认为我已经找到了可用文档的障碍。最终结果应该类似于graph。现在我的每日计数图表没有排序(即使我认为我已经指示了它)并且是unusable的行格式。

def data_sort():
    data_merge = data_extract()
    domains  = data_merge.groupby('PWx Domain')
    for domain in domains.groups.items():
        dsort = (data_merge.loc[domain[1]])
        print (dsort.head())
        open_dt = pd.to_datetime(dsort['Date Opened']).dt.date
        #open_dt.to_csv('output\''+str(domain)+'_out.csv', sep = ',')
        open_ct = open_dt.value_counts(sort= False) 
        biwk_avg = pd.rolling_mean(open_ct, 28)
        plt.plot(open_ct,'bo')
        plt.show()

data_sort()

1 个答案:

答案 0 :(得分:1)

在你的情况下单独滚动手段是不够的;你需要重新采样的组合(按天分组数据),然后是14天的滚动平均值(你为什么在代码中使用28?)。有点类似于:

for _,domain in data_merge.groupby('PWx Domain'):
    # Convert date to the index
    domain.index = pd.to_datetime(domain['Date Opened'])
    # Sort dy dates
    domain.sort_index(inplace=True) 
    # Do the averaging
    rolling = pd.rolling_mean(domain.resample('1D').mean(), 14)
    plt.plot(rolling,'bo')
    plt.show()