Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将DF列中的部分值与指定列表匹配并检索频率_Python_Regex_Pandas - Fatal编程技术网

Python 将DF列中的部分值与指定列表匹配并检索频率

Python 将DF列中的部分值与指定列表匹配并检索频率,python,regex,pandas,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 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']
因此(而且效率很低)我使用:

重申一下,在一些预处理之后,我将列转换为列表,然后是字符串,然后执行以下操作:

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
理想情况下,return dict应该只有5个键可以返回,即
room\u 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 
如果要将dict作为输出,只需执行以下操作:

result= {}
for tag in room_list:
    result[tag] = df['Room Location'].str.lower().str.contains(tag).sum()
或者Chris的解决方案:

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

嗨,塞巴斯蒂安,你能把jc merten放在同一个字符串中吗?谢天谢地,不能,因为它们是两个不同的构建。字典理解应该快一点:
{tag:df['Room Location'].str.lower().str.contains(tag).sum()for tag in Room_list}
这就是它运行得很好!我也在尝试dict理解方法。是的,对不起,我在dict解决方案中做了复制粘贴错误,现在可以修复了
result = {tag : df['Room Location'].str.lower().str.contains(tag).sum() for tag in room_list}