2016-11-27 2 views
2

У меня есть ряд панда l=pd.Series([3, 1, 4, 2, [1, 2, 10]])Подсчет значений в серии Panda?

Мне нужно, чтобы получить что-то вроде:

value count 
3  1 
1  2 
4  1 
2  2 
10  1 

l.value_counts() 

дает мне:

TypeError: unhashable type: 'list' 

Я даже пытался придавить список вроде этого:

chain = itertools.chain(*l) 
print(list(chain)) 

Но это дает мне:

TypeError: 'list' object is not callable 

ответ

3

Если размер данных не очень большой, вы можете использовать эту работу вокруг:

l.apply(pd.Series).stack().value_counts() 

#2.0  2 
#1.0  2 
#10.0 1 
#4.0  1 
#3.0  1 
#dtype: int64 

Или другой вариант с chain:

from itertools import chain 
pd.Series(list(chain.from_iterable(i if isinstance(i, list) else [i] for i in l))).value_counts() 

#2  2 
#1  2 
#10 1 
#4  1 
#3  1 
#dtype: int64 

А также можно использовать Counter из collections :

from itertools import chain 
from collections import Counter 
pd.Series(Counter(chain.from_iterable(i if isinstance(i, list) else [i] for i in l))) 

#2  2 
#1  2 
#10 1 
#4  1 
#3  1 
#dtype: int64 
1

Попробуйте

pd.value_counts([i for i in chain.from_iterable(l.values.tolist())]) 
1

Вот еще одно решение, которое использует np.hstack() и pd.value_counts() методы:

In [24]: pd.value_counts(np.hstack(l.values)) 
Out[24]: 
2  2 
1  2 
10 1 
4  1 
3  1 
dtype: int64 
Смежные вопросы