У меня df1 проиндексирован с 3 уровнями и df2 проиндексирован с теми же 3 уровнями. Давайте предположим, что date,name,criteria
- это 3 столбца, по которым индексируются эти два кадра данных.
Я бы хотел "объединить" df2
в df1
так, чтобы для каждого уровня индекса a_date,a_name,a_criteria
в df1
, значения, которые объединяются из df2
match a_date,a_name,specific_criteria
, где specific_criteria
- постоянное значение.
В итоге я сделал что-то похожее на приведенное ниже, и мне стало интересно, есть ли более элегантный способ?
new_df1= pd.DataFrame()
for group_name, group_df in df1.groupby(level=[0, 1]):
index_level = group_name + ("0M","field_v1",)
group_df["bla2"] = df2.loc[index_level, "bla2"]
new_df1 = pd.concat([new_df1, group_df])
Пример данных:
df1:
date asset tenor bla value
1/3/2005 AEX 12M 100 0.155346154
1/3/2005 AEX 12M 102.5 0.150401253
1/3/2005 AEX 12M 105 0.142983901
1/3/2005 AEX 12M 107.5 0.137154123
1/3/2005 AEX 12M 110 0.133267604
1/3/2005 AEX 6M 112.5 0.130425064
1/3/2005 AEX 6M 115 0.126161253
1/3/2005 AEX 6M 117.5 0.12344318
1/3/2005 AEX 6M 120 0.121631132
1/3/2005 AEX 6M 80 0.210254154
df2:
tenor field bla2 date
0M field_v1 351.91 1/3/2005
0M field_v2 351.91 1/3/2005
0M field_v3 347.7 1/3/2005
Я хотел бы получить следующее result_df1
(bla2
значение (351,91) для (1/3/2005,AEX,0M,field_v1")
в df2
для всех (1/3/2005,AEX)
строк в df1
:
date asset tenor bla value bla2
1/3/2005 AEX 12M 100 0.155346154 351.91
1/3/2005 AEX 12M 102.5 0.150401253 351.91
1/3/2005 AEX 12M 105 0.142983901 351.91
1/3/2005 AEX 12M 107.5 0.137154123 351.91
1/3/2005 AEX 12M 110 0.133267604 351.91
1/3/2005 AEX 6M 112.5 0.130425064 351.91
1/3/2005 AEX 6M 115 0.126161253 351.91
1/3/2005 AEX 6M 117.5 0.12344318 351.91
1/3/2005 AEX 6M 120 0.121631132 351.91
1/3/2005 AEX 6M 80 0.210254154 351.91