我有一只熊猫系列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
答案 0 :(得分:4)
如果您的数据量不是很大,您可以使用以下方法:
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 :(得分:1)
尝试
pd.value_counts([i for i in chain.from_iterable(l.values.tolist())])
答案 2 :(得分: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