【问题标题】:How to find most frequent word which comes in column in pandas dataframe如何找到熊猫数据框中列中出现的最常见单词
【发布时间】:2022-07-22 18:06:14
【问题描述】:
import pandas as pd
import numpy as np
df = pd.DataFrame({'City': ['Pune', 'Mumbai', 'Pune', 'Mumbai', 'Pune'],
        'Name': ['John', 'Boby', 'John', 'Boby', 'Nicky'], 
           'Competition': ['Chess,Drawing,Chess', 'Table Tennis,Table Tennis,Chess,Carrom', 'Chess,Carrom', 'Table Tennis,Chess,Chess,Chess', 'Carrom'] })
     City   Name    Competition
0   Pune    John    Chess,Drawing,Chess
1   Mumbai  Boby    Table Tennis,Table Tennis,Chess,Carrom
2   Pune    John    Chess,Carrom
3   Mumbai  Boby    Table Tennis,Chess,Chess,Chess
4   Pune    Nicky   Carrom
Required output
    City    Name    Competition                                  Most Frequent
0   Pune    John    Chess,Drawing,Chess                            Chess
1   Mumbai  Boby    Table Tennis,Table Tennis,Chess,Carrom         Table Tennis
2   Pune    John    Chess,Carrom,Chess,Carrom                      Carrom,Chess
3   Mumbai  Boby    Table Tennis,Chess,Chess,Chess                 Chess
4   Pune    Nicky   Carrom                                         Carrom

如果单词数量相等,则添加两个单词。否则最常见的单词

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    使用DataFrame.explode 拆分列中的第一个值,因此可能得到Series.mode 并连接所有顶部值:

    f = lambda x: ','.join(x.mode())
    df['Most Frequent'] = (df.assign(Competition = df['Competition'].str.split(','))
                             .explode('Competition')
                             .groupby(level=0)['Competition'] 
                             .agg(f))
    print (df)
         City   Name                             Competition Most Frequent
    0    Pune   John                     Chess,Drawing,Chess         Chess
    1  Mumbai   Boby  Table Tennis,Table Tennis,Chess,Carrom  Table Tennis
    2    Pune   John                            Chess,Carrom  Carrom,Chess
    3  Mumbai   Boby          Table Tennis,Chess,Chess,Chess         Chess
    4    Pune  Nicky                                  Carrom        Carrom
    

    【讨论】:

      【解决方案2】:

      apply 中使用statistics.multimode

      import pandas as pd
      from statistics import multimode
      
      df = pd.DataFrame({'City': ['Pune', 'Mumbai', 'Pune', 'Mumbai', 'Pune'],
                         'Name': ['John', 'Boby', 'John', 'Boby', 'Nicky'],
                         'Competition': ['Chess,Drawing,Chess', 'Table Tennis,Table Tennis,Chess,Carrom', 'Chess,Carrom',
                                         'Table Tennis,Chess,Chess,Chess', 'Carrom']})
      
      df["Most Frequent"] = df["Competition"].apply(lambda x: ",".join(multimode(x.split(","))[:2]))
      print(df)
      

      输出

           City   Name                             Competition Most Frequent
      0    Pune   John                     Chess,Drawing,Chess         Chess
      1  Mumbai   Boby  Table Tennis,Table Tennis,Chess,Carrom  Table Tennis
      2    Pune   John                            Chess,Carrom  Chess,Carrom
      3  Mumbai   Boby          Table Tennis,Chess,Chess,Chess         Chess
      4    Pune  Nicky                                  Carrom        Carrom
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-11-27
        • 2023-03-16
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2017-04-19
        相关资源
        最近更新 更多