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

时间:2017-02-22 12:32:31

标签: 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]

我想申请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

提前致谢!

1 个答案:

答案 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