将Pandas DataFrame列值与另一个DataFrame列匹配

时间:2018-12-05 16:11:07

标签: python pandas numpy dataframe

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方法,但毫无头绪。上面提供的代码为我提供了一个解决方案,但是它很慢,而且不像...那样的熊猫。

我究竟该如何进行?

3 个答案:

答案 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)

我认为应该这样做,使用mapBook的{​​{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")