我正在努力尋找一種“pythonic”方式來使這個邏輯起作用:
我有一個帶有一列字符串(“受益人”)的支付交易數據框:
指數 | 受益人 |
---|---|
12 | 瑞威說謝謝。... |
13 | NaN |
14 | OBI BAU- U. HEIMWER // 柏林 / DE / OBI 說謝謝 |
15 | NETFLIX 國際 BV |
我需要在我的數據框中創建另一列,這將是每一行所屬的類別。
指數 | 受益人 | 類別 |
---|---|---|
12 | 瑞威說謝謝。... | 雜貨 |
14 | OBI BAU- U. HEIMWER // 柏林 / DE / OBI 說謝謝 | 雜貨 |
15 | NETFLIX 國際 BV | 娛樂 |
我正在考慮製作一個像下面這樣的字典,並以某種方式從帶有上面列的類別字典中反向查找子字符串值:
categories = {"Groceries": ["EDEKA", "REWE", "OBI"],
"Entertainment": ["NETFLIX"]}
邏輯是:如果子字符串“REWE”在 df['beneficiary'] 中,則 df['category'] 等於子字符串所在的 dict 元素的鍵。
我對其他映射邏輯持開放態度。
您可以使用正則表達式,為此您需要修改字典以將匹配的字符串作為鍵和類別作為值:
categories = {"Groceries": ["EDEKA", "REWE", "OBI"],
"Entertainment": ["NETFLIX"]}
cat_sub = {v:k for k,l in categories.items() for v in l}
regex = r'(%s)' % '|'.join(fr'\b{c}\b' for c in cat_sub)
# regex looks like this: (\bEDEKA\b|\bREWE\b|\bOBI\b|\bNETFLIX\b)
df['category'] = df['beneficiary'].str.extract(regex)[0].map(cat_sub)
注意。我使用單詞邊界 ( \b
) 來確保匹配完整的單詞,regex = r'(%s)' % '|'.join(cat_sub)
如果您不想要這種行為,請使用
輸出:
index beneficiary category
0 12 REWE SAGT DANKE. ... Groceries
1 13 NaN NaN
2 14 OBI BAU- U. HEIMWER//BERLIN/DE / OBI SAGT DANKE Groceries
3 15 NETFLIX INTERNATIONAL B.V. Entertainment
注意。如果需要刪除 NaN,請使用dropna
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句