如何计算 pandas 列(字符串列表)中的值?

vae*_*noe 6 python pandas

我有一个数据框列,它是字符串列表:

df['colors']

0              ['blue','green','brown']
1              []
2              ['green','red','blue']
3              ['purple']
4              ['brown']
Run Code Online (Sandbox Code Playgroud)

我想要得到的是:

'blue' 2
'green' 2
'brown' 2
'red' 1
'purple' 1
[] 1
Run Code Online (Sandbox Code Playgroud)

在不知道自己在做什么的情况下,我什至设法数出了整列中的字符数

b 5
[ 5
] 5 
Run Code Online (Sandbox Code Playgroud)

ETC。

我认为这很酷,但我不知道解决方案

Cyp*_*erX 7

解决方案

\n

最佳选择df.colors.explode().dropna().value_counts().

\n

但是,如果您还想对空列表 ( []) 进行计数,请使用Method-1.B/C类似于Quang Hoang在评论中建议的内容。

\n

您可以使用以下两种方法中的任何一种。

\n
    \n
  • 方法 1:单独使用 pandas 方法 \xe2\xad\x90\xe2\xad\x90\xe2\xad\x90\n
    \n

    explode --> dropna --> value_counts

    \n
    \n
  • \n
  • 方法 2:使用list.extend --> pd.Series.value_counts
  • \n
\n
## Method-1\n# A. If you don\'t want counts for empty []\ndf.colors.explode().dropna().value_counts() \n\n# B. If you want counts for empty [] (classified as NaN)\ndf.colors.explode().value_counts(dropna=False) # returns [] as Nan\n\n# C. If you want counts for empty [] (classified as [])\ndf.colors.explode().fillna(\'[]\').value_counts() # returns [] as []\n\n## Method-2\ncolors = []\n_ = [colors.extend(e) for e in df.colors if len(e)>0]\npd.Series(colors).value_counts()\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
green     2\nblue      2\nbrown     2\nred       1\npurple    1\n# NaN     1  ## For Method-1.B\n# []      1  ## For Method-1.C\ndtype: int64\n
Run Code Online (Sandbox Code Playgroud)\n

虚拟数据

\n
import pandas as pd\n\ndf = pd.DataFrame({\'colors\':[[\'blue\',\'green\',\'brown\'],\n                             [],\n                             [\'green\',\'red\',\'blue\'],\n                             [\'purple\'],\n                             [\'brown\']]})\n
Run Code Online (Sandbox Code Playgroud)\n