获取按列年份分组的索引值集

时间:2017-01-23 16:02:29

标签: python python-3.x pandas

我有一个数据帧df1

        date      
sample
a1      2005-08-28
b1      2005-06-23
c1      2006-01-11  
d1      ...  

最终,我想要一组按年分组的样本字典。像

这样的东西
dict_y = {"2005": {a1, b2}, "2006": {c1}, ...}

我认为解决这个问题的最佳方法是使用pandas groupby,但我似乎无法让它工作。

df2 = df1.reset_index()
df2 = df2.set_index([(df2["date"].dt.year)])
df3 = df2.groupby(df2.index.values)

但是这里df3不是一个整齐地按年份分组的数据帧,而只是一个“GroupBy对象”。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用groupby dt.yearapply lambda函数to_dictindex值转换为sets。上次转换https://wordpress.stackexchange.com/questions/177070/filter-query-based-on-date-in-custom-field

df = pd.DataFrame({'date': [pd.Timestamp('2005-08-28 00:00:00'), 
                            pd.Timestamp('2005-06-23 00:00:00'), 
                            pd.Timestamp('2006-01-11 00:00:00')]}, index=['a1','b1','c1'])
print (df)
         date
a1 2005-08-28
b1 2005-06-23
c1 2006-01-11

df = df.groupby(df.date.dt.year).apply(lambda x: set(x.index.values)).to_dict()
print (df)
{2005: {'a1', 'b1'}, 2006: {'c1'}}

答案 1 :(得分:1)

使用 GroupBy的 .groups属性的另一个变体,它返回一个字典。

稍后将字典的值从pd.Index类型转换为set以从中提取唯一元素。

{k:set(v) for k,v in df.groupby(df['date'].dt.year).groups.items()}
Out[54]:
{2005: {'a1', 'b1'}, 2006: {'c1'}}