代码之家  ›  专栏  ›  技术社区  ›  orcaman

熊猫:宾和森

  •  0
  • orcaman  · 技术社区  · 6 年前

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

    Country,City,Year,Value1,Value2
    Germany,Berlin,2020,9,3
    Germany,Berlin,2017,1,4
    Germany,Berlin,2011,1,4
    Israel,Tel Aviv, 2007,4.5,1
    

    我想根据 Year 列,以便不使用特定年份而是有一个5年的范围,然后在 Value1 我是说, Value2 ,按分组 Country 我是说, City 和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,直到我的数据中可能的最早日期)。

    我如何使用熊猫来实现这个目标?

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  5
  •   BENY    6 年前

    使用 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