Python 熊猫:Bin和Sum

Python 熊猫:Bin和Sum,python,pandas,Python,Pandas,我有以下数据(csv格式): 我想根据年份列创建bin,这样就不用使用特定年份,而是有一个5年的范围,然后将值1、值2中的值相加,按国家、城市和bin ID进行分组(在下面的例子中,我称之为YearRange) 例如,运行此过程后,数据如下所示: Country,City,YearRange,Value1,Value2 Germany,Berlin,2016-2020,10,7 Germany,Berlin,2011-2015,1,4 Israel,Tel Aviv,2006-2010,4.5,

我有以下数据(csv格式):

我想根据
年份
列创建bin,这样就不用使用特定年份,而是有一个5年的范围,然后将
值1
值2
中的值相加,按
国家
城市
和bin ID进行分组(在下面的例子中,我称之为
YearRange

例如,运行此过程后,数据如下所示:

Country,City,YearRange,Value1,Value2
Germany,Berlin,2016-2020,10,7
Germany,Berlin,2011-2015,1,4
Israel,Tel Aviv,2006-2010,4.5,1
如果这简化了事情,我不介意提前创建可能的范围(即,我将有一个包含所有可能范围的表格:2016-2020、2011-2015、2006-2010,直到我的数据中可能的最早日期)

我如何使用熊猫来实现这一点


谢谢!

使用
pd.cut
groupby

df.groupby([df.Country,df.City,pd.cut(df.Year,[2006,2011,2016,2020]).astype(str)])[['Value1','Value2']].sum().reset_index()
Out[254]: 
   Country      City          Year  Value1  Value2
0  Germany    Berlin  (2006, 2011]     1.0       4
1  Germany    Berlin  (2016, 2020]    10.0       7
2   Israel  Tel Aviv  (2006, 2011]     4.5       1

使用
pd.cut
groupby

df.groupby([df.Country,df.City,pd.cut(df.Year,[2006,2011,2016,2020]).astype(str)])[['Value1','Value2']].sum().reset_index()
Out[254]: 
   Country      City          Year  Value1  Value2
0  Germany    Berlin  (2006, 2011]     1.0       4
1  Germany    Berlin  (2016, 2020]    10.0       7
2   Israel  Tel Aviv  (2006, 2011]     4.5       1

到目前为止,您尝试了什么?@user3483203我能够使用cut函数从年开始创建BIN,但这给我留下了一个只包含一列的数据帧。我需要以某种方式将binned df与原始df合并,然后执行总和聚合,但我不确定如何执行此操作。到目前为止,您尝试了什么?@user3483203我能够做到使用cut函数从年份创建BIN,但这会给我留下一个只有一列的数据帧。我需要以某种方式将binned df与原始df合并,然后执行总和聚合,但我不确定如何做到这一点