#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