我有一个名为df_ref
的熊猫DataFrame,就像:
a b c result
0 (-0.001, 0.00482] (-0.001, 1.0] (-0.001, 1.0] 0.622745
1 (-0.001, 0.00482] (-0.001, 1.0] (-0.001, 1.0] 0.450869
2 (-0.001, 0.00482] (-0.001, 1.0] (1.0, 5.0] 0.693840
3 (-0.001, 0.00482] (-0.001, 1.0] (1.0, 5.0] 0.484881
4 (-0.001, 0.00482] (-0.001, 1.0] (5.0, 13.0] 0.687814
... ... ... ... ... ... ...
91 (17.953, 90.0] (4.0, 480.0] (1.0, 5.0] 0.500905
92 (17.953, 90.0] (4.0, 480.0] (5.0, 13.0] 0.500905
93 (17.953, 90.0] (4.0, 480.0] (5.0, 13.0] 0.500905
94 (17.953, 90.0] (4.0, 480.0] (13.0, 1103.0] 0.500905
95 (17.953, 90.0] (4.0, 480.0] (13.0, 1103.0] 0.500905
和另一个名为df
的DataFrame,类似于:
a b c
1 0.004213 11.0 11.0
2 32.326794 0.0 0.0
3 5.415845 1.0 1.0
4 0.001968 10.0 41.0
5 0.014745 9.0 13.0
... ... ... ... ... ...
1435435 0.000185 1.0 1.0
1435436 89.999919 0.0 0.0
1435437 4.788090 1.0 1.0
1435438 7.441620 0.0 22.0
1435439 0.001053 1.0 1.0
我希望将df
的每一行与df_ref
的所有行进行比较,确定它们属于哪一行,并从result
中提取相应的df_ref
值,然后将这些值放在包含1,435,439个元素的列表中(或仅在df
中添加一个新列,都可以)。由于数据量很大,因此需要有效地进行编码,因此我知道简单的循环可能不是最佳方法,这就是为什么我寻求帮助。
答案 0 :(得分:1)
我假设a
的{{1}},b
和c
列中的值的类型为intervalIndex,并且将它们结合起来总是独特的组合。如果是这种情况,那么我想解决方案可能只是为两个df设置索引并将它们组合为pe的问题
df_ref
将来我可能会花一些时间来创建虚拟数据帧,您可能希望共享一个片段以轻松地重新创建它们(根据我的回答),以便其他人更轻松地为您提供帮助。
让我知道这是否无济于事
答案 1 :(得分:0)
我会做类似以下的事情。制作名为df_ref
的{{1}}的副本,将元组分成单独的列df_ref2
,a_low
等。然后像这样加入框架
a_high
现在,您将df = df.join(df_ref2,
on=( (df.a >= df_ref2.a_low) & (df.a <= df_ref2.a_high) &
(df.b >= df_ref2.b_low) & (df.b <= df_ref2.b_high) &
(df.c >= df_ref2.c_low) & (df.c <= df_ref2.c_high) ),
how='inner')
df = df.drop('a_low', 'a_high', 'b_low', 'b_high', 'c_low', 'c_high')
列加入了result
。请注意,行数可能会增加,因为每个df行可以匹配多个df_ref行,因为您看到df_ref的前两行具有相同的间隔。