按箱分组数据和使用熊猫分组时间

时间:2016-07-15 12:57:16

标签: numpy pandas group-by grouping binning

我正在尝试在时间窗口内从时间序列(每小时和小时温度值)中存储值。 也就是说,从原始的每小时值开始,我想每天,每周或每月提取分箱值。 我试图将groupby + TimeGrouper(" ")pd.cut合并,结果不佳。

我从这个tutorial发现了一个很好的函数,它建议映射数据(将每个值与下一列的映射范围相关联),然后根据它进行分组。

def map_bin(x, bins):
    kwargs = {}
    if x == max(bins):
        kwargs['right'] = True
    bin = bins[np.digitize([x], bins, **kwargs)[0]]
    bin_lower = bins[np.digitize([x], bins, **kwargs)[0]-1]
    return '[{0}-{1}]'.format(bin_lower, bin)

df['Binned'] = df['temp'].apply(map_bin, bins=freq_bins)

但是,应用此函数会导致IndexError:index n 超出轴0的范围 n

理想情况下,我喜欢让这项工作并将其应用于同时实现双重分组:一个是分箱,另一个是分组。

1 个答案:

答案 0 :(得分:2)

<强>更新
由于双索引列,我的早期尝试似乎导致了问题。我已经简化为似乎工作得更好的东西。

import pandas as pd
import numpy as np
xaxis = np.linspace(0,50)
temps = pd.Series(data=xaxis,name='temps')
times = pd.date_range(start='2015-07-15',periods=50,freq='6H')
temps.index = times

bins = [0,10,20,30,40,50]

temps.resample('W').agg(lambda series:pd.value_counts(pd.cut(series,bins),sort=False)).unstack()

输出:

           (0, 10]  (10, 20]    (20, 30]    (30, 40]    (40, 50]
2015-07-19       9        10           0           0           0
2015-07-26       0         0          10          10           8
2015-08-02       0         0           0           0           2