2016-11-27 4 views
2

Ich habe einen Panda Serie l=pd.Series([3, 1, 4, 2, [1, 2, 10]])Zählen des Auftretens von Werten in einer Panda-Serie?

Ich brauche so etwas zu bekommen:

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

l.value_counts() 

gibt mir:

TypeError: unhashable type: 'list' 

Ich versuchte sogar, wie dies die Liste zu glätten:

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

Aber es gibt mir:

TypeError: 'list' object is not callable 

Antwort

3

Wenn Ihre Daten Größe nicht sehr groß ist, können Sie diese Arbeit nutzen um:

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

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

Oder eine andere Option mit 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 

Und auch Counter von collections verwenden :

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

Versuchen Hier

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

ist noch eine andere Lösung, die verwendet np.hstack() und pd.value_counts() Methoden:

In [24]: pd.value_counts(np.hstack(l.values)) 
Out[24]: 
2  2 
1  2 
10 1 
4  1 
3  1 
dtype: int64 
Verwandte Themen