首页 > 解决方案 > 每月汇总值后创建新数据框

问题描述

我有一个数据框,其中包含多年期间每天的交易。我想将此 df 转换为 df_monthly ,其中每一行包含给定月份的交易总和,从 2019 年 1 月(1 月)到 2020 年 2 月 2 日排列。

假设这是我的df:

 df = pd.DataFrame([['2019-01-01', 11, 82],
                   ['2019--01-02', 3, 98],
                   ['2019-02-01', 1, 3],
                   ['2019-02-02', 47, 79],
                   ['2020-01-01', 56, 48],
                   ['2020-02-02', 8, 2]], columns=['date', 'col1', 'col2'])

df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)

df

           col1 col2
date        
2019-01-01  11  82
2019-01-02  3   98
2019-02-01  1   3
2019-02-02  47  79
2020-01-01  56  48
2020-02-02  8   2

我试过这个

df['month'] = df.index.month
df['year'] = df.index.year
df_monthly = df.groupby(['month', 'year']).sum()
 

输出:

               col1 col2
month   year        
1       2019    14  180
        2020    56  48
2       2019    48  82
        2020    8   2

我想要的是这样的:

    year    month   col1 col2
0   2019    1       14   180
1   2019    2       48    82
2   2020    1       56    48
3   2020    2        8     2

你有什么建议吗?

谢谢!

标签: pythonpandas-groupby

解决方案


可以使用'groupby'。

df.groupby(['year','month']).agg(sum).reset_index()
   
    year    month   col1    col2
0   2019    1   14  180
1   2019    2   48  82
2   2020    1   56  48
3   2020    2   8   2

推荐阅读