代码之家  ›  专栏  ›  技术社区  ›  Nick

Pandas df.mode,列中每个单元格有多个值

  •  0
  • Nick  · 技术社区  · 5 年前

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

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

    这里有一个图片要澄清:

    enter image description here

    所有的投入都是值得赞赏的,

    谢谢!

    1 回复  |  直到 5 年前
        1
  •  3
  •   jezrael    5 年前

    首次使用 Series.str.split 具有 expand=True 用于数据帧和重塑 DataFrame.stack ,然后按 Series.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