2016-11-27 81 views
2

我有一个熊猫系列l=pd.Series([3, 1, 4, 2, [1, 2, 10]])计算熊猫系列中值的出现次数?

我需要得到的东西,如:

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 

而且还可以使用Countercollections

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