我对熊猫很陌生,我想做以下事情,但是在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']
非常感谢您的帮助。
谢谢
答案 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']