熊猫:创建新的数据框,该数据框统计一列中出现的关键字/短语的次数

时间:2018-07-20 23:23:51

标签: list pandas search count frequency

我有以下单词列表:

列表= [“堵塞的排水口”,“右翼”,“马”,“鸟”,“碰撞灯”]

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

ItemDecoration

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

所需的输出:

firebase use 'your-database'
firebase database:remove '/path/to/node'

我在整个stackoverflow上进行了搜索,但是找不到我的具体情况。

2 个答案:

答案 0 :(得分:0)

我将首先使用TEXTstr.split()重新格式化str.join()列的格式以摆脱您的滑稽间距。然后,对每个关键字使用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数据类型

答案 1 :(得分:0)

您可以使用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