从pandas专栏获取独特月份列表

时间:2017-12-11 18:22:39

标签: python pandas

我们说我有以下大熊猫date_range

rng = pd.date_range('9/1/2017', '12/31/2017')

我想获得一份独特的月份清单。这是我到目前为止所提出的,但必须有更好的方法:

df = pd.DataFrame({'date': rng})
months = df.groupby(pd.Grouper(key='date', freq='M')).agg('sum').index.tolist()
formatted_m = [i.strftime('%m/%Y') for i in months]
# ['09/2017', '10/2017', '11/2017', '12/2017']

请注意,日期将存储在DataFrame列或索引中。

4 个答案:

答案 0 :(得分:3)

使用numpy.unique,因为DatetmeIndex.strftime返回numpy array

rng = pd.date_range('9/1/2017', '12/31/2017')
print (np.unique(rng.strftime('%m/%Y')).tolist())
['09/2017', '10/2017', '11/2017', '12/2017']

如果输入是DataFrame使用Anton vBR's solution的列:

print(df['date'].dt.strftime("%m/%y").unique().tolist())

drop_duplicates

print(df['date'].dt.strftime("%m/%y").drop_duplicates().tolist())

<强>计时

所有解决方案都具有相同的性能 - 唯一vs drop_duplicates:

rng = pd.date_range('9/1/1900', '12/31/2017')

df = pd.DataFrame({'date': rng})

In [54]: %timeit (df['date'].dt.strftime("%m/%y").unique().tolist())
1 loop, best of 3: 469 ms per loop

In [56]: %timeit (df['date'].dt.strftime("%m/%y").drop_duplicates().tolist())
1 loop, best of 3: 466 ms per loop

答案 1 :(得分:2)

是或否:

df['date'].dt.strftime("%m/%y").unique().tolist()
#['09/17', '10/17', '11/17', '12/17']

答案 2 :(得分:1)

不需要构建df

(rng.year*100+rng.month).value_counts().index.tolist()
Out[861]: [201712, 201710, 201711, 201709]

更新:

set((rng.year*100+rng.month).tolist())
Out[865]: {201709, 201710, 201711, 201712}

答案 3 :(得分:0)

我经常使用这个,我认为这很简单:

$(element).on("click", ["Jesikka"],  myHandler);

function myHandler(event){
   alert(event.data);     //passed in "event.data"
}

编辑:可能不再相关,但仅仅是为了完整性:

 Request.GetOwinContext().Authentication.SignOut( DefaultAuthenticationTypes.ApplicationCookie );// https://stackoverflow.com/questions/28999318/owin-authentication-signout-doesnt-seem-to-remove-the-cookie - stralos s answer
 Request.GetOwinContext().Authentication.SignOut( DefaultAuthenticationTypes.ExternalCookie );