我有以下单词列表:
列表= [“堵塞的排水口”,“右翼”,“马”,“鸟”,“碰撞灯”]
我有以下数据框(注意间距可能很奇怪):
ItemDecoration
我想创建一个表,该表显示关键字以及TEXT字段中关键字出现频率的频率计数。但是,如果一个关键字在TEXT列的同一行中出现多次,则仅计算一次。
所需的输出:
firebase use 'your-database'
firebase database:remove '/path/to/node'
我在整个stackoverflow上进行了搜索,但是找不到我的具体情况。
答案 0 :(得分:0)
我将首先使用TEXT
和str.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