从另一个列求和

这是我的问题:

在我的数据框中,我有两个列:km和value

    km    value
0   1      10
1   10     2
2   3      5

,我想从km的范围内得出价值的总和 就像1

我已经尝试过了:

 i = 0
 j = 3
 while j < 200 :
     sum_km = dvf[i < dvf['km'] and j >= dvf['km'] ]['value'].sum()
     i += 3
     j += 3

但是我有:

ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().

我想在结尾处:

Total value for 1 at 3 kms : 15
Total value for 3 at 6 kms : 0
Total value for 6 at 9 kms : 0
Total value for 9 at 12 kms : 2

lmzml 回答:从另一个列求和

如果需要所有间隔:

width = 3
min_val = dvf['km'].min() - 1
max_val = dvf['km'].max()
bins = pd.IntervalIndex.from_tuples([(x,x+width) for x in range(min_val,max_val,width)])
dvf.groupby(pd.cut(dvf['km'],bins = bins))['value'].agg('sum')



>>> output

km
(0,3]     15
(3,6]      0
(6,9]      0
(9,12]     2

我将品脱格式留给您,因为这似乎不是主要问题。

,

我的解决方案与ansev相似,只是我对您的分组有所不同。

df['bin'] = (df['km']/3).astype(int)
df[['bin','value']].groupby('bin').agg(sum)
,

我的解决方案pd.cut

df.value.groupby(pd.cut(df.km,[0,3,6,9,12])).sum()
Out[400]: 
km
(0,12]     2
Name: value,dtype: int64
,

使用pd.interval_range + pd.cut

bins=pd.interval_range(df['km'].min()-1,12,freq=3)
df.groupby(pd.cut(df['km'],bins)).value.sum()

km
(0,dtype: int64
,

您需要布尔运算符:

dvf[(i < dvf['km']) & (j >= dvf['km'])]['value'].sum()
本文链接:https://www.f2er.com/3163550.html

大家都在问