我有一个数据框列,它是字符串列表:
df['colors']
0 ['blue','green','brown']
1 []
2 ['green','red','blue']
3 ['purple']
4 ['brown']
我想要得到的是:
'blue' 2
'green' 2
'brown' 2
'red' 1
'purple' 1
[] 1
在不知道自己在做什么的情况下,我什至设法数出了整列中的字符数
b 5
[ 5
] 5
etc.
我认为这很酷,但我不知道解决方案
Solution
最佳选择: df.colors.explode().dropna().value_counts()
.
但是,如果您还想对空列表进行计数([]
), use Method-1.B/C
类似于所建议的光黄 https://stackoverflow.com/users/4238408/quang-hoang在评论中。
您可以使用以下两种方法中的任何一种。
-
Method-1:单独使用pandas方法⭐⭐⭐
explode --> dropna --> value_counts
-
Method-2: Use
list.extend --> pd.Series.value_counts
## Method-1
# A. If you don't want counts for empty []
df.colors.explode().dropna().value_counts()
# B. If you want counts for empty [] (classified as NaN)
df.colors.explode().value_counts(dropna=False) # returns [] as Nan
# C. If you want counts for empty [] (classified as [])
df.colors.explode().fillna('[]').value_counts() # returns [] as []
## Method-2
colors = []
_ = [colors.extend(e) for e in df.colors if len(e)>0]
pd.Series(colors).value_counts()
Output:
green 2
blue 2
brown 2
red 1
purple 1
# NaN 1 ## For Method-1.B
# [] 1 ## For Method-1.C
dtype: int64
虚拟数据
import pandas as pd
df = pd.DataFrame({'colors':[['blue','green','brown'],
[],
['green','red','blue'],
['purple'],
['brown']]})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)