我目前正在使用一个数据框,它的每个单元格中都有一个类型为列表(带有字符串)的列。我有兴趣申请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]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我认为您需要先创建 flattenlist然后应用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
Run Code Online (Sandbox Code Playgroud)
或者创建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
Run Code Online (Sandbox Code Playgroud)