首页 > 解决方案 > Pandas df.mode,列中每个单元格具有多个值

问题描述

我有一个带有Keywords列的数据框。该列中的每个单元格都有 5-10 个单独的值(逗号分隔),由 1-3 个单词组成。如何计算列中出现次数最多的关键字?

我已经尝试过df.Keywords.mode,但它返回每个单元格的所有值,因为它们显然不会在每个单元格中多次出现。

这里有一张图片来澄清:

在此处输入图像描述

感谢所有输入,

谢谢!

标签: pythonpandas

解决方案


首先使用Series.str.splitwith expand=Truefor DataFrame 和 reshape by DataFrame.stack,然后 count bySeries.value_counts并通过 获得最高值Series.head

df = pd.DataFrame({'Keywords':['aa,bb,vv,vv','aa,aa,cc,bb','zz,bb,aa,ss']})

N = 5
df1 = (df.Keywords.str.split(',', expand=True)
         .stack()
         .value_counts()
         .head(N)
         .rename_axis('val')
         .reset_index(name='count'))
print (df1)
  val  count
0  aa      4
1  bb      3
2  vv      2
3  zz      1
4  cc      1

如果没有缺失值,另一种解决方案是展平拆分列表并按以下方式计数Counter

from collections import Counter
N = 5
df1 = pd.DataFrame(Counter([y for x in df.Keywords for y in x.split(',')]).most_common(N), 
                   columns=['val','count'])
print (df1)
  val  count
0  aa      4
1  bb      3
2  vv      2
3  zz      1
4  cc      1

推荐阅读