我用3个级别对df1进行了索引,并用相同的3个级别对df2进行了索引。
让我们假设date,name,criteria
是这两个数据帧的索引所依据的3列
我想将df2
连接到df1
,这样对于df1
中的每一级索引a_date,a_name,a_criteria
,从df2
连接的值与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
我想为df1
中的所有(1/3/2005,AEX)
行(1/3/2005,AEX,0M,field_v1")
获取以下result_df1
(bla2
)值(351.91):
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
如果它对某人有用,你实际上可以这样做
编辑:@jezrael提供的更好的解决方案
对于我来说,通过^{} 和^{} 进行过滤:
相关问题 更多 >
编程相关推荐