【问题标题】:How to sum section of a column by date with Pandas?如何使用 Pandas 按日期对列的部分求和?
【发布时间】:2017-09-27 19:48:00
【问题描述】:

如何按日期对列的各个部分求和,例如在本例中,首先是从 2000 年到 2008 年,然后是从 2009 年到 2016 年?

    Date  Total Managed Expenditure
0   2001                      503.2
1   2002                      529.9
2   2003                      559.8
3   2004                      593.2
4   2005                      629.5
5   2006                      652.1
6   2007                      664.3
7   2008                      688.2
8   2009                      732.0
9   2010                      759.2
10  2011                      769.2
11  2012                      759.8
12  2013                      760.6
13  2014                      753.3
14  2015                      757.6
15  2016                      753.9

【问题讨论】:

  • 您可以使用pd.cut 对年份进行分组(将它们转换为分类变量),然后使用your_dataframe.groupby() 按类别分组。
  • 你的问题有点误导。我认为您应该澄清 2000 到 2008 是否实际上意味着 2000-01-012008-01-012000-01-012009-01-01。如果您真的想要每 8 年使用一次 sum,您可能应该这样说。

标签: python pandas jupyter-notebook


【解决方案1】:

如cmets中所说,pandas.cut进行分类,然后groupby

代码:

df.groupby(pd.cut(df.Date, [2000, 2008, 2016]))['TME'].sum()

测试代码:

df = pd.read_fwf(StringIO(
    u"""
    Date  TME
    2001  503.2
    2002  529.9
    2003  559.8
    2004  593.2
    2005  629.5
    2006  652.1
    2007  664.3
    2008  688.2
    2009  732.0
    2010  759.2
    2011  769.2
    2012  759.8
    2013  760.6
    2014  753.3
    2015  757.6
    2016  753.9"""
), header=1)\

print(df.groupby(pd.cut(df.Date, [2000, 2008, 2016]))['TME'].sum())

结果:

Date
(2000, 2008]    4820.2
(2008, 2016]    6045.6
Name: TME, dtype: float64

【讨论】:

  • [-np.inf, 2008, np.inf] 确保脚本不会很快中断。
【解决方案2】:

斯蒂芬的回答更好。但是我喜欢这个

df.groupby(df.Date.le(2008)).TME.sum()

【讨论】:

  • @StephenRauch 顺便说一句;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-13
  • 1970-01-01
  • 2020-12-06
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 2019-04-02
相关资源
最近更新 更多