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}