我目前正在使用一个数据框,其每个单元格中都有一列类型列表(带字符串)。
我有兴趣在它上面应用value.counts()
,好像所有的列表都被分成一个巨大的列表(试图这样做,但效果不好)
我拥有的数据结构的玩具示例:
import pandas as pd
df_list = pd.DataFrame({'listcol':[['a','b','c'],['a','b','c']]})
print df_list
listcol
0 [a, b, c]
1 [a, b, c]
我想申请value.counts()
,如果它是一个很大的连续列表如下:
#desired output:
df=pd.DataFrame(['a','b','c','a','b','c'])
df.columns = ['col']
df.col.value_counts() #desired output!
b 2
c 2
a 2
提前致谢!
答案 0 :(得分:2)
我认为首先需要创建展平list
,然后应用Counter
,最后创建Series
:
from itertools import chain
from collections import Counter
print (Counter(chain.from_iterable(df_list['listcol'])))
Counter({'b': 2, 'a': 2, 'c': 2}
s = pd.Series(Counter(chain.from_iterable(df_list['listcol'])))
print (s)
a 2
b 2
c 2
dtype: int64
或创建Series
并使用value_counts
:
#for python 2 omit list
s = pd.Series(list(chain.from_iterable(df_list['listcol'])))
print (s)
0 a
1 b
2 c
3 a
4 b
5 c
dtype: object
print (s.value_counts())
c 2
a 2
b 2
dtype: int64