![](/img/trans.png)
[英]Check if values of a column is in another column array in a pandas dataframe
[英]Check if any pandas dataframe column values are within another pandas dataframe column
我的 df1 公司名稱很亂:
messyCompany
0 google123xyz
1 amazon12345
2 amzn12345
3 mcdonalds inc
4 healthtech ltd
df2 具有干凈的公司名稱和相應的關鍵字:
cleanCompany keywords
0 Amazon amazon
1 Amazon amzn
我想檢查 df1 中的 messyCompany 是否包含 df2 中的任何關鍵字值,如果是,請輸入干凈的公司名稱。 例如:
messyCompany cleanCompany
0 google123xyz
1 amazon12345 Amazon
2 amzn12345 Amazon
3 mcdonalds inc
4 healthtech ltd
我首先嘗試使用兩個 for 循環; 一個循環遍歷 messyCompany 名稱,每個值循環遍歷關鍵字。 但這非常慢。
然后我嘗試用apply替換一個for循環:
def search(x):
for i in range(df2.shape[0]):
if df2['keywords'] in df1['messyCompany']:
return df2['cleanCompany']
df1['cleanCompany'] = df1.apply(lambda x: search(x), axis=1)
這更快但總體上仍然很慢(實際的df有數千行)。 我嘗試使用嵌套在另一個應用中的應用,但這比較慢。 我一直在閱讀很多如何優化熊貓(應用、矢量化、分塊等),但我似乎找不到優化所需雙循環的最佳方法。 這種類型的雙循環是否有最佳實踐?
我會使用str.extract
和map
結果:
df = pd.DataFrame({'messyCompany': {0: 'google123xyz', 1: 'amazon12345', 2: 'amzn12345', 3: 'mcdonalds inc', 4: 'healthtech ltd'}})
ref = pd.DataFrame({'cleanCompany': {0: 'Amazon', 1: 'Amazon'}, 'keywords': {0: 'amazon', 1: 'amzn'}})
df["found"] = (df["messyCompany"].str.extract("("+"|".join(ref["keywords"])+")", expand=False)
.map(ref.set_index("keywords")["cleanCompany"]))
print (df)
messyCompany found
0 google123xyz NaN
1 amazon12345 Amazon
2 amzn12345 Amazon
3 mcdonalds inc NaN
4 healthtech ltd NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.