![](/img/trans.png)
[英]Most Pythonic and Efficient way to compare Version Strings based on meeting a condition
[英]Most efficient way to compare two panda data frame and update one dataframe based on condition
我有兩個數據框 df1 和 df2。 df2 由“tagname”和“value”列組成。 字典“bucket_dict”保存來自 df2 的數據。
bucket_dict = dict(zip(df2.tagname,df2.value))
在 df1 中有數百萬行。 3 列在 df1 中有“apptag”、“評論”和“類型”。 我想在這兩個數據幀之間進行匹配,如果
bucket_dict 中的“字典鍵”包含在 df1["apptag"] 中,然后更新 df1["comments"] = 對應字典鍵和 df1["Type"] = 對應 bucket_dict["key name"] 的值。 我使用了以下代碼:
for each_tag in bucket_dict:
df1.loc[(df1["apptag"].str.match(each_tag, case = False ,na = False)), "comments"] = each_tag
df1.loc[(df1["apptag"].str.match(each_tag, case = False ,na = False)), "Type"] = bucket_dict[each_tag]
有沒有什么有效的方法可以做到這一點,因為它需要更長的時間。
對已創建字典的 df 進行分桶:
bucketing_df = pd.DataFrame([["pen", "study"], ["pencil", "study"], ["ersr","study"],["rice","grocery"],["wht","grocery"]], columns=['tagname', 'value'])
其他數據框:
output_df = pd.DataFrame([["test123-pen", "pen"," "], ["test234-pencil", "pencil"," "], ["test234-rice","rice", " "], columns=['apptag', 'comments','type'])
您可以通過以這種方式在您的comments
列上調用應用程序以及在您的bucketing_df
上調用一個loc
來做到這一點 -
def find_type(a):
try:
return (bucketing_df.loc[[x in a for x in bucketing_df['tagname']]])['value'].values[0]
except:
return ""
def find_comments(a):
try:
return (bucketing_df.loc[[x in a for x in bucketing_df['tagname']]])['tagname'].values[0]
except:
return ""
output_df['type'] = output_df['apptag'].apply(lambda a: find_type(a))
output_df['comments'] = output_df['apptag'].apply(lambda a:find_comments(a))
在這里,我不得不讓它們獨立的功能,以便它可以處理apptag
中不存在tagname
apptag
它給你這個作為output_df
-
apptag comments type
0 test123-pen pen study
1 test234-pencil pencil study
2 test234-rice rice grocery
所有這些代碼使用的是您在問題結束時提供的現有bucketing_df
和output_df
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.