如何使用列值的上限聚合行?

时间:2018-02-13 19:47:51

标签: python pandas

我有一个pd.DataFrame我想改造:

   id  values  days  time  value_per_day
0   1      15    15     1         1
1   1      20     5     2         4
2   1      12    12     3         1

我想将这些汇总到10天的相同数据桶中。由于{1}在时间1大于10,所以这应该溢出到下一行,第2行的days是第1行和第2行的平均值。

以下是结果输出,其中value/day(values, 0) = 15*(10/15) = 10

(values, 1) = (5+20)/2

我试过 id values days value_per_day 0 1 10 10 1.0 1 1 25 10 2.5 2 1 10 10 1.0 3 1 2 2 1.0

pd.Grouper

但我显然错误地使用它。

为方便起见,

csv:

df.set_index('days').groupby([pd.Grouper(freq='10D', label='right'), 'id']).agg({'values': 'mean'})

Out[146]:
            values
days    id        
5 days  1       16
15 days 1       10

1 个答案:

答案 0 :(得分:2)

注意:这是一个时间成本解决方案

PATCH

我在这里没有包含groupby id,如果你需要真实数据,你可以用newdf=df.reindex(df.index.repeat(df.days)) v=np.arange(sum(df.days))//10 dd=pd.DataFrame({'value_per_day': newdf.groupby(v).value_per_day.mean(),'days':np.bincount(v)}) dd Out[102]: days value_per_day 0 10 1.0 1 10 2.5 2 10 1.0 3 2 1.0 dd.assign(value=dd.days*dd.value_per_day) Out[103]: days value_per_day value 0 10 1.0 10.0 1 10 2.5 25.0 2 10 1.0 10.0 3 2 1.0 2.0 进行循环,然后在for循环中应用上面的步骤