我有一個如下形式的數據框: Room Location0 jc room g1 merten 30052 merten 25003 merten 30054 merten 30055 merten 30056 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) + 1num_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 39jc cinema 35merten 2500 31jc gold rm 31the hub corner pocket 30令人沮喪的是,它完全按照它所說的去做,我的問題如下:我如何解析列(或列表 -> 我應該說的字符串)并將列的元素與指定列表的元素部分匹配,即使該元素附加了過多的“噪音”,或者例如:jc room g = jcmerten 3005 = merten理想情況下,返回 dict 應該只有 5 個要返回的鍵,room_list以及它們的后續頻率。我也嘗試去除所有數字,但由于某些元素具有過多的弦噪音,因此問題仍然存在。我已經搜索了以前的相關問題,但沒有找到任何特定于我的問題的內容,但是如果您發現了(相關的)騙子,請告訴我,這樣我就不會浪費您的時間。謝謝!
1 回答

慕碼人2483693
TA貢獻1860條經驗 獲得超9個贊
我的解決方案在這里:
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()
或克里斯的解決方案:
result = {tag : df['Room Location'].str.lower().str.contains(tag).sum() for tag in room_list}
添加回答
舉報
0/150
提交
取消