如何在 python 中按月对日期进行分组
How to group dates by month in python
我知道如果我的对象具有呈现数据的特殊键,我就可以进行分组。但是我有一些数据作为索引,看起来像这样
这是索引
DatetimeIndex(['2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06',
'2000-01-07', '2000-01-10', '2000-01-11', '2000-01-12',
'2000-01-13', '2000-01-14',
...
'2019-12-18', '2019-12-19', '2019-12-20', '2019-12-23',
'2019-12-24', '2019-12-25', '2019-12-26', '2019-12-27',
'2019-12-30', '2019-12-31'],
dtype='datetime64[ns]', name='DATE', length=5217, freq=None)
Index(['DEXUSEU'], dtype='object')
整个table是
DEXUSEU
DATE
2000-01-03 1.0155
2000-01-04 1.0309
2000-01-05 1.0335
...
最终我会得到一个月的最高值。
我在玩
.groupby(pd.Grouper(freq='M')).max()
但是我没有得到想要的结果。
我的目标是每个月都有最大价值。我有 10 年的数据 euro/usd 每天的费率值对。分组意味着最终我将获得 2000 年 1 月的最大值,2000 年 2 月的最大值...,2019 年 12 月的最大值。
.groupby(usdEuro.index.month).max() 只会给出 12 个值,我希望每个年份有 12 个值。
使用DataFrameGroupBy.idxmax
with convert years with months to month periods and select rows by DataFrame.loc
:
df.loc[df.groupby(df.index.to_period('M'))['DEXUSEU'].idxmax()]
或者如果可能的话使用Grouper
:
df.loc[df.groupby(pd.Grouper(freq='M'))['DEXUSEU'].idxmax()]
我知道如果我的对象具有呈现数据的特殊键,我就可以进行分组。但是我有一些数据作为索引,看起来像这样
这是索引
DatetimeIndex(['2000-01-03', '2000-01-04', '2000-01-05', '2000-01-06',
'2000-01-07', '2000-01-10', '2000-01-11', '2000-01-12',
'2000-01-13', '2000-01-14',
...
'2019-12-18', '2019-12-19', '2019-12-20', '2019-12-23',
'2019-12-24', '2019-12-25', '2019-12-26', '2019-12-27',
'2019-12-30', '2019-12-31'],
dtype='datetime64[ns]', name='DATE', length=5217, freq=None)
Index(['DEXUSEU'], dtype='object')
整个table是
DEXUSEU
DATE
2000-01-03 1.0155
2000-01-04 1.0309
2000-01-05 1.0335
...
最终我会得到一个月的最高值。 我在玩
.groupby(pd.Grouper(freq='M')).max()
但是我没有得到想要的结果。
我的目标是每个月都有最大价值。我有 10 年的数据 euro/usd 每天的费率值对。分组意味着最终我将获得 2000 年 1 月的最大值,2000 年 2 月的最大值...,2019 年 12 月的最大值。
.groupby(usdEuro.index.month).max() 只会给出 12 个值,我希望每个年份有 12 个值。
使用DataFrameGroupBy.idxmax
with convert years with months to month periods and select rows by DataFrame.loc
:
df.loc[df.groupby(df.index.to_period('M'))['DEXUSEU'].idxmax()]
或者如果可能的话使用Grouper
:
df.loc[df.groupby(pd.Grouper(freq='M'))['DEXUSEU'].idxmax()]