![](/img/trans.png)
[英]How to change values in certain column of DataFrame based on another DataFrame in Pandas
[英]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.