2017-02-06 4 views
2

У меня есть два блока данных с идентификаторами клиентов (с надписью «C_ID») и с числом посещений за год.Python Pandas dataframe добавить «1» в новый столбец, если ID существует в другом фрейме данных

Я хочу добавить столбец в моей 2010 dataframe, если клиент также делали покупки в 2009 году Таким образом, мне нужно создать цикл проверки, если C_ID с 2010 года существует в 2009 году, добавить 1, в противном случае 0.

Я использовал этот код и не работает: (сообщение об ошибке, ничего не происходит)

for row in df_2010.iterrows(): 
    #check if C_ID exists in the other dataframe 
    check = df_2009[(df_2009['C_ID'] == row['C_ID'])] 

    if check.empty: 
     #ID not exist in 2009 file, add 0 in new column 
     row['shopped2009'] = 0 

    else: 
     #ID exists in 2009 file, add 1 into same column 
     row['shopped2009'] = 1 

ответ

4

Вы можете использовать dataframe.isin()

% timeit df_2010['new'] = np.where(df_2010['C_ID'].isin(df_2009['C_ID']), 1, 0) 

лучший из 3: 384 мкс на петле

Как @Kris предложил

%timeit df_2010['new'] = (df_2010['C_ID'].isin(df_2009['C_ID'])).astype(int) 

лучший из 3: 584 мкс в петле

Обратите внимание, что

df_2010['new'] = df_2010['C_ID'].isin(df_2009['C_ID']) 

также будет работать, но колонка новый будет иметь значения истина и ложь Inplace 1 и 0 соответственно.

+0

Это прекрасно - вы гений! СПАСИБО – jeangelj

+0

@jeangelj, вы можете принять ответ, если он сработает. Спасибо вам :) – Vaishali

+0

Я уже принял его и поддержал его – jeangelj

Смежные вопросы