country = []
for i in df_temp['Customer Name'].iloc[:]:
if i in gui_broker['EXACT_DDI_CUSTOMER_NAME'].tolist():
country.append(gui_broker["Book"].values[gui_broker['EXACT_DDI_CUSTOMER_NAME'].tolist().index(i)])
else:
country.append("No Book Defined")
df_temp["Country"] = country
我目前有一个带有一列(“客户名称”)的大型DataFrame(df_temp),并尝试将其与具有3列的小型DataFrame(gui_broker)进行匹配-其中之一具有大型DataFrame的所有唯一值(“ EXACT_DDI_CUSTOMER_NAME”)。
在匹配df_temp的值行之后,我想基于匹配在df_temp中创建一个新列,其值为我的小型DataFrame(gui_broker)的值'Book'。我尝试了所有适用的lambda方法,但毫无头绪。上面提供的代码为我提供了一个解决方案,但是它很慢,而且不像...那样的熊猫。
我究竟该如何进行?
答案 0 :(得分:2)
您可以使用熊猫合并来做到这一点。像这样...
df_temp = df_temp.merge(gui_broker[['EXACT_DDI_CUSTOMER_NAME','Book']], left_on='Customer Name', right_on='EXACT_DDI_CUSTOMER_NAME', how='left' )
df_temp['Book'] = df_temp['Book'].fillna('No Book Defined')
答案 1 :(得分:1)
我认为应该这样做,使用map
将Book
的{{1}}的{{1}}列映射到{{1}中的gui_broker
},:
EXACT_DDI_CUSTOMER_NAME
尽管我需要一些示例数据来进行测试!
答案 2 :(得分:1)
看起来您正在寻找join
(文档为here)
通过将第一列中的所选列与第二列中的索引进行匹配,它将DataFrame与另一个框架连接起来。
所以
df_temp.join(gui_broker
.set_index("EXACT_DDI_CUSTOMER_NAME")
.loc[:, ["Book"]],
on="Customer Name")