2017-06-04 152 views
7

使用GROUPBY也有一些是错误的,当我使用GROUPBY方法:类型错误:unhashable类型:“名单”当蟒蛇

data = pd.Series(np.random.randn(100),index=pd.date_range('01/01/2001',periods=100)) 
keys = lambda x: [x.year,x.month] 
data.groupby(keys).mean() 

,但它有一个错误:类型错误:unhashable类型:“名单”。 我想按年份和月份分组,然后计算手段,为什么它有错?

回答

11

list对象不能用作关键字,因为它不可哈希。首先使用它作为GROUPBY键之前

>>> {[1, 2]: 3} 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: unhashable type: 'list' 
>>> {(1, 2): 3} 
{(1, 2): 3} 

data = pd.Series(np.random.randn(100), index=pd.date_range('01/01/2001', periods=100)) 
keys = lambda x: (x.year,x.month) # <---- 
data.groupby(keys).mean() 
+0

你也可以使用'operator.attrgetter':'键= operator.attrgetter( '年', '月')' – falsetru

2

转换列表到STR:您可以使用tuple对象,而不是。

data.groupby(lambda x: str([x.year,x.month])).mean() 
Out[587]: 
[2001, 1] -0.026388 
[2001, 2] -0.076484 
[2001, 3] 0.155884 
[2001, 4] 0.046513 
dtype: float64 
+1

相关:[Stringly类型化(http://wiki.c2.com/ ?StringlyTyped)没有理由 – cat

相关问题