web-dev-qa-db-fra.com

TypeError: type non partageable: 'list' lors de l'utilisation groupby dans python

Il y a quelque chose qui ne va pas lorsque j'utilise la méthode groupby:

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()

mais il contient une erreur: TypeError: type non partageable: 'liste'. Je veux grouper par année et par mois, puis calculer les moyens, pourquoi ça ne va pas?

12
littlely

list objet ne peut pas être utilisé comme clé car il n'est pas hachable. Vous pouvez utiliser à la place un objet Tuple:

>>> {[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()
16
falsetru

Convertissez d'abord la liste en chaîne avant de l'utiliser comme clés de regroupement.

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
3
Allen