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,没问题。我认为最好单独问你的第二个问题(如果其他地方还没有问过的话)。