Python 如何从pandas dataframe中按月汇总支出值?

Python 如何从pandas dataframe中按月汇总支出值?,python,pandas,dataframe,group-by,pandas-groupby,Python,Pandas,Dataframe,Group By,Pandas Groupby,如何在此数据框中按月和按日期聚合值: payout_date payout_value 2017-01-14 1 2017-01-14 30 2017-01-16 216 2017-02-17 23 2017-02-17 2 2017-03-19 745 2017-03-19 32 2017-03-20 11 2017-03-20 222 2017-03-21 4 对于我使用的每日聚合值 df.groupby('date').agg(['sum']) payout_val

如何在此数据框中按月和按日期聚合值:

payout_date payout_value
2017-01-14  1
2017-01-14  30
2017-01-16  216
2017-02-17  23
2017-02-17  2
2017-03-19  745
2017-03-19  32
2017-03-20  11
2017-03-20  222
2017-03-21  4
对于我使用的每日聚合值

df.groupby('date').agg(['sum'])

payout_value
sum
date    
2017-01-14  31
2017-01-16  216
2017-02-17  25
2017-03-19  777
2017-03-20  233
2017-03-21  4
我如何获得每月累计的
支出值

payout_date payout_value
2017-01-14  247
2017-02-17  25
2017-03-19  1014

这是一个解决方案。需要注意的几点:

  • 当您将
    pd.Grouper
    freq='M'
    一起使用时,
    groupby
    索引将成为每个月的最后一天
  • 对于按天分组,不需要转换为
    pd.Grouper
    对象,但如果愿意,可以将
    pd.Grouper
    freq='D'
    一起使用,并过滤掉
    NaN
按月分组

df['payout_date'] = pd.to_datetime(df['payout_date'])

grouper = pd.Grouper(key='payout_date', freq='M')
res1 = df.groupby(grouper)['payout_value'].sum().reset_index()

print(res1)

   month  payout_value
0      1           247
1      2            25
2      3          1014
按天分组

res2 = df.groupby('payout_date', as_index=False)['payout_value'].sum()

print(res2)

  payout_date  payout_value
0  2017-01-14            31
1  2017-01-16           216
2  2017-02-17            25
3  2017-03-19           777
4  2017-03-20           233
5  2017-03-21             4

这是一个解决方案。需要注意的几点:

  • 当您将
    pd.Grouper
    freq='M'
    一起使用时,
    groupby
    索引将成为每个月的最后一天
  • 对于按天分组,不需要转换为
    pd.Grouper
    对象,但如果愿意,可以将
    pd.Grouper
    freq='D'
    一起使用,并过滤掉
    NaN
按月分组

df['payout_date'] = pd.to_datetime(df['payout_date'])

grouper = pd.Grouper(key='payout_date', freq='M')
res1 = df.groupby(grouper)['payout_value'].sum().reset_index()

print(res1)

   month  payout_value
0      1           247
1      2            25
2      3          1014
按天分组

res2 = df.groupby('payout_date', as_index=False)['payout_value'].sum()

print(res2)

  payout_date  payout_value
0  2017-01-14            31
1  2017-01-16           216
2  2017-02-17            25
3  2017-03-19           777
4  2017-03-20           233
5  2017-03-21             4

您是否尝试过df.groupby(pd.Grouper(key='payout\u date',freq='M')).payount\u value.sum()?同样地,
freq='D'
用于每日汇总。感谢您,它每月运行得非常好。但是,对于daily,它输入每天的日期值,即使没有相应的值。我还使用了df.groupby('date').agg(['sum'])你试过
df.groupby(pd.Grouper(key='payout\u date',freq='M')).payount\u value.sum()
?同样地,
freq='D'
用于每日汇总。感谢您,它每月运行得非常好。但是,对于daily,它输入每天的日期值,即使没有相应的值。我还使用了df.groupby('date').agg(['sum'])谢谢!在x轴上绘制“付款日期”和在y轴上绘制“付款价值”的最快方法是什么?或者我应该提出另一个问题。感谢you@user40,没问题。我认为最好单独问你的第二个问题(如果其他地方没有这样问的话)。谢谢!在x轴上绘制“付款日期”和在y轴上绘制“付款价值”的最快方法是什么?或者我应该提出另一个问题。感谢you@user40,没问题。我认为最好单独问你的第二个问题(如果其他地方还没有问过的话)。