【问题标题】:Pandas: Create New Dataframe that Counts Number of Times Keywords / Phrases From List Occur in One ColumnPandas:创建新的数据框,计算列表中关键字/短语在一列中出现的次数
【发布时间】:2018-12-29 07:03:42
【问题描述】:

我有以下单词列表:

list = ['排水管堵塞', '右翼', '马', '鸟', '碰撞灯']

我有以下数据框(注意间距可能很奇怪):

ID  TEXT               
1   you have   clogged   drain     
2   the dog   has a right wing   clogged drain     
3   the  bird flew  into collision light       
4   the horse is here to horse   around   
5   bird    bird bird    

我想创建一个表格,显示关键字和关键字在 TEXT 字段中出现的频率计数。但是,如果一个关键字在 TEXT 列的同一行中出现多次,则只计算一次。

期望的输出:

keywords         count
clogged drain    2
right wing       1
horse            1
bird             2
collision light  1

我已经搜索了整个 stackoverflow,但找不到我的具体案例。

【问题讨论】:

    标签: list pandas search count frequency


    【解决方案1】:

    您可以使用extractall

    df.TEXT.str.extractall(r'({})'.format('|'.join(list)))[0].str.get_dummies().sum(level=0).gt(0).astype(int).sum()
    Out[225]: 
    bird               2
    clogged drain      2
    collision light    1
    horse              1
    right wing         1
    dtype: int64
    

    【讨论】:

      【解决方案2】:

      我将首先使用str.split()str.join() 重新格式化TEXT 列以消除您的有趣间距。然后,为每个关键字使用str.contains,并获取输出的布尔值的总和(如果找到您的关键字,它将返回True):

      # Reformat text, splitting wherever you have one or more spaces
      df['formatted_text'] = df.TEXT.str.split('\s+').str.join(' ')
      
      # create your output dataframe
      df2 = pd.DataFrame(my_list, columns=['keywords'])
      
      # Count occurences:
      df2['count'] = df2['keywords'].apply(lambda x: df.formatted_text.str.contains(x).sum())
      

      结果:

      >>> df2
                keywords  count
      0    clogged drain      2
      1       right wing      1
      2            horse      1
      3             bird      2
      4  collision light      1
      

      需要注意的是,我把你list的变量名改成了my_list,以免掩盖python内置的数据类型

      【讨论】:

        猜你喜欢
        • 2021-02-25
        • 1970-01-01
        • 2021-10-15
        • 1970-01-01
        • 1970-01-01
        • 2023-02-08
        • 2022-01-10
        • 2022-01-04
        • 2021-11-09
        相关资源
        最近更新 更多