Как выполнить подсчет значений с помощью groupby в столбце numpy array pandas

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

У меня есть фрейм данных pandas, подобный этому:

 import pandas as pd
foo = pd.DataFrame({'s': ['a','b','a','a'], 'versions':[['1','2'],'2',['1','2'],'2']})
 

Я хотел бы value_counts() разделить столбцы versions по группам s

Я пробовал

 foo.groupby('s')['versions'].value_counts()
 

но я получаю сообщение об ошибке TypeError: unhashable type: 'list' , есть идеи?

Ответ №1:

Вы можете преобразовывать списки / массивы в хешируемые кортежи, но поскольку есть также строки, требуется if-else оператор для избежания разделения строк 100 на кортежи (1,0,0) :

 foo['versions'] = foo['versions'].apply(lambda x: tuple(x) if isinstance(x, list) else (x,))
print (foo)
   s versions
0  a   (1, 2)
1  b     (2,)
2  a   (1, 2)
3  a     (2,)

s = foo.groupby('s')['versions'].value_counts()
print (s)
s  versions
a  (1, 2)      2
   (2,)        1
b  (2,)        1
Name: versions, dtype: int64