简体   繁体   中英

Matching Pandas DataFrame Column Values with another DataFrame Column

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

I have currently a large DataFrame (df_temp) with one column ('Customer Name') and am trying to match it with a small DataFrame (gui_broker) which has 3 columns - one of which has all unique values of the large DataFrame ('EXACT_DDI_CUSTOMER_NAME').

After matching the value row of df_temp I want to create a new column in df_temp with the value 'Book' of my small DataFrame (gui_broker) based on the matching. I tried every apply lambda method, but am out of clue. The above provided code provides me with a solution, but it's slow and not Pandas like...

How exactly could I proceed?

You can use pandas merge to do that. like this...

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')

I believe this should do it, using map to map the Book column of gui_broker by the EXACT_DDI_CUSTOMER_NAME , onto Custome Name in df_tmp , :

df_tmp['Country'] = (df_tmp['Customer Name']
                     .map(gui_broker.set_index('EXACT_DDI_CUSTOMER_NAME').Book)
                     .fillna('No Book Defined'))

Though I would need some example data to test it with!

Looks like you are looking for join (docs are here ) It joins DataFrame with the other by matching the selected column(s) in the first with the index in the second.

So

df_temp.join(gui_broker
             .set_index("EXACT_DDI_CUSTOMER_NAME")
             .loc[:, ["Book"]],
             on="Customer Name")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM