У меня есть следующие фреймы данных:
df1 = pd.DataFrame({'Invoice': ['3 HongKong', 'A Africa', 'A GhanaLimited', 'AfricaGroup'],
'Currency': ['EUR', 'EUR', 'EUR', 'USD']})
df2 = pd.DataFrame({'Ref': ['3 Hong', 'A Africa', 'A Ghana', 'Africa Group'],
'Type': ['01', '03', '04', '02'],
'Amount': ['Live', 'No', 'Live', 'No'],
'Comment': ['bla', 'bla', 'bla', 'bla']})
print(df1)
print(df2)
Invoice Currency
0 3 HongKong EUR
1 A Africa EUR
2 A GhanaLimited EUR
3 AfricaGroup USD
Ref Type Amount Comment
0 3 Hong 01 Live bla
1 A Africa 03 No bla
2 A Ghana 04 Live bla
3 Africa Group 02 No bla
Я хотел бы создать новый фрейм данных (df3), где я объединяю эти два на основе счета. Проблема заключается в том, что номера счетов-фактур не всегда являются «полным соответствием», а иногда «частичным соответствием» в df2 ['Ref']. Таким образом, присоединение к «Счета-фактуре» не дает желаемого результата, поскольку оно не копирует данные для счетов-фактур.
Я попробовал следующий код:
df4 = df1.copy()
def get_amount(x):
return df2.loc[df2['Ref'].str.contains(x), 'Amount'].iloc[0]
df4['Amount'] = df4['Invoice'].apply(get_amount)
Но это дает мне ошибку :
IndexError: один позиционный индексатор вышел за пределы
Можно ли решить эту проблему?