【问题标题】:How to sum by month in timestamp Data Frame?如何在时间戳数据框中按月求和?
【发布时间】:2021-04-27 15:30:47
【问题描述】:
我有这样的数据框:
| trx_date |
trx_amount |
| 2013-02-11 |
35 |
| 2014-03-10 |
26 |
| 2011-02-9 |
10 |
| 2013-02-12 |
5 |
| 2013-01-11 |
21 |
我如何过滤到月份和年份?这样我就可以总结 trx_amount
示例预期输出:
| trx_monthly |
trx_sum |
| 2013-02 |
40 |
| 2013-01 |
21 |
| 2014-02 |
35 |
【问题讨论】:
标签:
python-3.x
pandas
dataframe
【解决方案1】:
您可以通过Series.dt.to_period 将值转换为月份,然后聚合sum:
df['trx_date'] = pd.to_datetime(df['trx_date'])
df1 = (df.groupby(df['trx_date'].dt.to_period('m').rename('trx_monthly'))['trx_amount']
.sum()
.reset_index(name='trx_sum'))
print (df1)
trx_monthly trx_sum
0 2011-02 10
1 2013-01 21
2 2013-02 40
3 2014-03 26
或者通过Series.dt.strftime将日期时间转换为YYYY-MM格式的字符串:
df2 = (df.groupby(df['trx_date'].dt.strftime('%Y-%m').rename('trx_monthly'))['trx_amount']
.sum()
.reset_index(name='trx_sum'))
print (df2)
trx_monthly trx_sum
0 2011-02 10
1 2013-01 21
2 2013-02 40
3 2014-03 26
或者转换成月份和年份,那么输出就不同了——3列:
df2 = (df.groupby([df['trx_date'].dt.year.rename('year'),
df['trx_date'].dt.month.rename('month')])['trx_amount']
.sum()
.reset_index(name='trx_sum'))
print (df2)
year month trx_sum
0 2011 2 10
1 2013 1 21
2 2013 2 40
3 2014 3 26
【解决方案2】:
你可以试试这个-
df['trx_month'] = df['trx_date'].dt.month
df_agg = df.groupby('trx_month')['trx_sum'].sum()