如何使用 Python/Pandas 从日期字段按月分组

我有一个 Dataframe df 如下:


date               value_1    value_2

2018.07.06           10          0

2018.07.14           20          1

2018.07.27           20          2

2018.08.06           30          1

2018.08.09           40          3

2018.08.13           20          2

2018.09.10           30          1

2018.09.22           50          2

2018.10.09           20          3

2018.10.27           20          1

我需要按月对上述数据进行分组以获得输出:


date              value_1    value_2

2018.07.01           50          3

2018.08.01           90          6

2018.09.01           80          3

2018.10.01           40          4

我怎样才能在熊猫中有效地做到这一点?


牧羊人nacy
浏览 459回答 3
3回答

萧十郎

尝试使用 pd.Grouper 和 freq = 'MS' 进行分组:df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()输出:        date  value_1  value_20 2018-07-01       50        31 2018-08-01       90        62 2018-09-01       80        33 2018-10-01       40        4而且,如果您想恢复点日期格式,可以使用以下命令:df_out = df.groupby(pd.Grouper(freq='MS', key='date')).sum().reset_index()df_out['date'] = df_out['date'].dt.strftime('%Y.%m.%d')df_out输出:         date  value_1  value_20  2018.07.01       50        31  2018.08.01       90        62  2018.09.01       80        33  2018.10.01       40        4

慕容708150

做df.date=pd.to_datetime(df.date)df.groupby(df.date+pd.offsets.MonthBegin(-1)).sum()Out[171]:             value_1  value_2date                        2018-07-01       50        32018-08-01       90        62018-09-01       80        32018-10-01       40        4

MM们

如果您将日期作为索引,则就像重新采样一样简单。df.resample('MS').sum()如果您还没有将其作为索引,则可以set_index.df.set_index('date').resample('MS').sum()两者都给你            value_1  value_2date                        2018-07-01       50        32018-08-01       90        62018-09-01       80        32018-10-01       40        4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python