在每个单元格中填充列表的 DataFrame 上应用 .value_counts()

Yeh*_*ens 2 python pandas

我目前正在使用一个数据框,它的每个单元格中都有一个类型为列表(带有字符串)的列。我有兴趣申请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)

提前致谢!

jez*_*ael 5

我认为您需要先创建 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)