python - 将 DF 列中的部分值与指定列表进行匹配并检索频率

标签 python regex pandas

我有一个以下形式的数据框:

              Room Location
0                 jc room g
1               merten 3005
2               merten 2500
3               merten 3005
4               merten 3005
5               merten 3005
6                 jc bistro

我目前正在尝试解析此特定列以提取此指定列表中的所有值:

room_list = ['jc','sub', 'hub', 'merten', 'rsch', 'corner pocket', 'mix', 'fenwick']

因此(而且效率相当低)我使用:

room_list = (MASTER_TABLE['Room Location'].astype(str).str.lower()).tolist()

room_string = ''.join(room_list)

room_freq = re.findall(r'|'.join(room_list), room_string)

重申一下,经过一些预处理后,我将列转换为列表,然后转换为字符串,然后执行以下命令:

freqs = {}

for item in room_freq:
    freqs[item] = freqs.get(item, 0) + 1

num_sort_freqs = dict(sorted(freqs.items(), key=lambda x: x[1], reverse = True))

print('Sorted name occurences: ','\n')
print('===================================================================\n')

for k, v in num_sort_freqs.items():
    print(k, v)

这非常有效,但是,当我返回“排序”字典时,我得到:

merten 1204 39
jc cinema 35
merten 2500 31
jc gold rm 31
the hub corner pocket 30

令人沮丧的是,它完全按照它所说的那样进行,我的问题如下:

如何解析列(或者我应该说的列表 -> 字符串)并将该列的元素与指定列表的元素部分匹配,即使该元素附加了过多的“噪音”或者例如:

jc room g = jc
merten 3005 = merten

理想情况下,返回字典应该只返回 5 个键,即 room_list 的键及其后续频率。我也尝试过删除所有数字,但由于某些元素具有过多的字符串噪声,因此问题仍然存在。

我已经搜索了以前的相关问题,但没有找到任何特定于我的问题的内容,但如果您发现(相关的)骗局,请告诉我,这样我就不会浪费您的时间。谢谢!

最佳答案

我的解决方案在这里:

room_list = ['jc','sub', 'hub', 'merten', 'rsch', 'corner pocket', 'mix', 'fenwick']
for tag in room_list:
    result = df['Room Location'].str.lower().str.contains(tag).sum()
    print(f'{tag} : {result}')

输出:

jc : 2            
sub : 0          
hub : 0          
merten : 5       
rsch : 0         
corner pocket : 0
mix : 0          
fenwick : 0 

如果你想要一个字典作为输出,只需这样做:

result= {}
for tag in room_list:
    result[tag] = df['Room Location'].str.lower().str.contains(tag).sum()

或者克里斯的解决方案:

result = {tag : df['Room Location'].str.lower().str.contains(tag).sum() for tag in room_list}

关于python - 将 DF 列中的部分值与指定列表进行匹配并检索频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55065825/

相关文章:

python - 聊天应用程序。对于 Django

python - Django:为 ModelForm 中的 ForeignKey 添加 "Add new"按钮

python - 获取 imagenet 模型 pnasnet_large 与 hub.KerasLayer 一起使用

html - Sublime Text Html 字数统计器

python - 对堆叠的 pandas 数据框进行子集化

python - 如何在 Python 中比较文件的内容?

javascript - 从旧的 html dom 元素创建 json

regex - 如何使用htaccess从网址中删除文件夹名称

python - 将包含 dict 的单元格分解为 Pandas 中的多行

python - 迭代几天( Pandas )