簡體   English   中英

根據另一個 dataframe 更改 dataframe 列中的值

[英]Change values in dataframe column based on another dataframe

我已經看到了大量類似的問題,但沒有什么能完全回答我想要做的事情。

我有兩個數據框

  • Conn_df包含手動輸入的名稱和公司詳細信息(例如Conn_df["Name", "Company_name", "Company_Address"]
  • Cleanse_df包含已清理的公司名稱(例如Cleanse_df["Original_Company_Name", "Cleanse_Company_Name"]

兩者的數據都保存在導入腳本的 csv 文件中。

我想使用Conn_df.Company_Name中的值更改Cleanse_df中的公司詳細信息,其中Conn_df.Company_Name等於Cleanse_df.Original_Company_Name並由Cleanse_df.Cleanse_Company_Name替換。

我努力了:

Conn_df["Company"] = Conn_df["Company"].replace(Conn_df["Company"], Cleanse_df["Cleansed"])但得到了

replace() 不帶關鍵字 arguments

我也試過:

Conn_df["Company"] = Conn_df["Company"].map(Cleanse_df.set_index("Original")["Cleansed"])但得到

重新索引僅對具有唯一值的 Index 對象有效

有關如何獲取要替換的值的任何建議。 我會注意到這兩個數據框都運行到數萬行,因此無法創建手動列表。

我想你想要這樣的東西:

conn_df = pd.DataFrame({'Name':['Mac','K','Hutt'],
                    'Company_name':['McD','KFC','PH'],
                    'Company_adress':['street1','street2','street4']})
cleanse_df = pd.DataFrame({'Original_Company_Name':['McD'],'Cleanse_Company_Name': 
['MacDonalds']})
cleanse_df = cleanse_df.rename(columns={'Original_Company_Name':'Company_name'})
merged_df = conn_df.merge(cleanse_df,on='Company_name',how='left')
merged_df['Cleanse_Company_Name'].fillna(merged_df['Company_name'],inplace=True)
final_df =  merged_df[['Name','Company_adress','Cleanse_Company_Name']]\
    .rename(columns={'Cleanse_Company_Name':'Company_name'})

這將返回:

   Name Company_adress Company_name
0   Mac        street1   MacDonalds
1     K        street2          KFC
2  Hutt        street4           PH

您合並兩個數據框,然后保留替換的新值,如果沒有替換名稱的值,則名稱將保持不變,這是由 fillna 命令完成的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM