【问题标题】:How to group a date column into year and sum a spending column according to the year?如何将日期列分组为年份并根据年份汇总支出列?
【发布时间】:2019-03-05 14:48:10
【问题描述】:

我正在尝试将我的数据按年份分组,并根据它们所属的年份汇总支出。

这是一个示例数据:

date:            spend_amt:

2/1/2014          10000

2/5/2014           98

1/2/2015          5834.2

7/8/2017          561236

9/3/2017          568

28/1/2016         989895.3

我当前的代码

def yearlySpending(self):

    dfspendingYearly = pd.DataFrame()
    dfspendingYearly = self.dfGov.groupby(["date"])['spend_amt'].agg('sum')
    dfspendingYearly.groupby(dfspendingYearly["date"].dt.year)['spend_amt'].agg(['sum'])

我收到一个错误,'KeyError: 'date''

期望的输出

date:       spend_amt:
2014        10098
2015        5834.2
2016        989895.3
2017        561804

【问题讨论】:

    标签: python-2.7 pandas dataframe pandas-groupby


    【解决方案1】:

    你的错误意味着没有列date,我猜有indexdate

    df.index = pd.to_datetime(df.index)
    dfspendingYearly = df.groupby(df.index.year).sum().reset_index()
    print (dfspendingYearly)
       date  spend_amt
    0  2014    10098.0
    1  2015     5834.2
    2  2016   989895.3
    3  2017   561804.0
    

    【讨论】:

    • AttributeError: 'Series' object has no attribute 'year',虽然我导致了这个
    【解决方案2】:

    将您的日期戳列转换为日期时间并按年份对数据框进行分组

    可能重复 grouping by year

    df["date:"] = pd.to_datetime(df['date:'])
    df.groupby(df['date:'].dt.year).sum().reset_index()
    

    输出:

        date:   spend_amt:
    0   2014    10098.0
    1   2015    5834.2
    2   2016    989895.3
    3   2017    561804.0
    

    【讨论】:

    • 在您的代码中,日期列被称为字符串,如果您想单独访问年份,则必须将其转换为日期戳,否则对单个字符串执行分组操作。
    • 关键错误的原因是您已将分组系列值分配给 "dfspendingYearly" ,因此日期名称是该系列的索引,因此您无法作为列访问(您可以尝试 to_frame 后跟重置索引)然后你可以访问@justalazyguy
    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 2018-06-24
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多