分组日期时间的期间列表

时间:2019-02-28 06:36:01

标签: python pandas datetime

我对熊猫很陌生,我想做以下事情,但是在groupby上遇到了一些麻烦。请帮忙。

我有一个包含许多列的数据框,其中之一是日期。 我需要一个与之不同的月份列表。

df = pd.DataFrame(['02 Jan 2018', '02 Feb 2018', '02 Feb 2018', '02 Mar 2018'], columns=['date'])
datelist = pd.to_datetime(df.date)
datelist = datelist.groupby([datelist.dt.month, datelist.dt.year])

当我做datelist.all()时,我得到以下信息,

date  date
1     2018         True
2     2018         True
Name: date, dtype: bool

我需要类似['Jan 2018', 'Feb 2018']

非常感谢您的帮助。

谢谢

2 个答案:

答案 0 :(得分:1)

使用to_datetime,然后使用strftime转换为自定义字符串,获取unique值,最后转换为string s:

datelist = pd.to_datetime(df.date).dt.strftime('%b %Y').unique().tolist()
print (datelist)
['Jan 2018', 'Feb 2018', 'Mar 2018']

如果日期时间的输入格式为02 Jan 2018的另一种解决方案是将第一个空格split分开,则选择第二个值并获得unique个值:

datelist = df['date'].str.split(n=1).str[1].unique().tolist()

答案 1 :(得分:0)

您可以使用to_period(对于一个系列,它应该是dt.to_period):

In [11]: datelist.to_period("M")
Out[11]:
PeriodIndex(['2019-01', '2019-01', '2019-01', '2019-01', '2019-01', '2019-01',
             ...
             '2019-02', '2019-02', '2019-02', '2019-02', '2019-02'],
            dtype='period[M]', freq='M')

In [12]: datelist.to_period("M").unique()
Out[12]: PeriodIndex(['2019-01', '2019-02'], dtype='period[M]', freq='M')

In [13]: [str(m) for m in datelist.to_period("M").unique()]
Out[13]: ['2019-01', '2019-02']