gpt4 book ai didi

python - 如何聚合具有列值上限的行?

转载 作者:太空宇宙 更新时间:2023-11-03 11:17:45 25 4
gpt4 key购买 nike

我有一个 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 天桶中。由于 days 在时间 1 大于 10,这应该溢出到下一行,第二行的 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:

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

但我显然没有正确使用它。

为方便起见的 csv:

id,values,days,time  
1,10,15,1
1,20,5,2
1,12,12,3

最佳答案

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

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

我没有在这里包含 groupby id,如果你需要它用于你的真实数据,你可以使用 df.groupby(id) 进行 for 循环,然后在 for 循环中应用上述步骤

关于python - 如何聚合具有列值上限的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48774504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com