Ошибка может быть связана с тем, что у вас есть 2 столбца с именем 'D_ID' в df1
. Если вы переименуете их, например, с помощью df1.columns = [u'D_ID', u'D_NBR', u'D_ID2', u'D_HR_LVL']
, ваша программа запустится, но не даст желаемого результата.
Вот еще один способ, вы можете сделать это, сначала объединив df1 с df2 по всем идентификаторам commum, а затем измените значения в соответствии с вашими требованиями, например:
df1.columns = [u'D_ID', u'D_NBR', u'D_ID2', u'D_HR_LVL']
mer_df = df1.merge(df2.rename(columns={'U_ID':'D_ID'}),how='left').fillna('')
#requirement else: looking for values in D_HR_LVL not IT or FIN and erase them
mer_df.loc[~mer_df.D_HR_LVL.isin(['IT','FIN']),'U_NBR'] = ''
#create the column N_Col_1 and N_Col_2
mask_FIN = (mer_df.D_HR_LVL=='FIN') & (mer_df.U_NBR != '') #mask to select the rows
mer_df.loc[mask_FIN,'N_Col_1'] = mer_df.loc[mask_FIN,'D_ID'].astype(str).str[:3]
mer_df.loc[mask_FIN,'N_Col_2'] = mer_df.loc[mask_FIN,'D_ID'].astype(str).str[3:5]
# fillna
mer_df = mer_df.fillna('')
print (mer_df)
D_ID D_NBR D_ID2 D_HR_LVL U_NBR N_Col_1 N_Col_2
0 851669006 8383 93433 IT 851669
1 260969003 7337 83189 CORP
2 7383 8300 72521 FIN
3 260969003 6262 66611 No Data
4 919832001 22922 90111 IT 919832
5 749277000 81123 53621 FIN 749277 749 27
6 3353 6363 99931 No Data