我有一个如下的数据框
df =
a ID1 ID2 Proximity
0 0 900000498 NaN 0.000000
1 1 900000498 900004585 3.900000
2 2 900000498 900005562 3.900000
3 3 900000498 900008613 0.000000
4 4 900000498 900012333 0.000000
5 5 900000498 900019524 3.900000
6 6 900000498 900019877 0.000000
7 7 900000498 900020141 3.900000
8 8 900000498 900022133 3.900000
9 9 900000498 900022919 0.000000
我想为给定的一对
ID1-ID2
查找相应的Proximity
值。例如给定我想要的输入
[900000498, 900022133]
作为输出3.900000
最佳答案
如果这是常见操作,则将索引设置为这些列,然后可以使用loc
执行索引查找并传递col值的元组:
In [60]:
df1 = df.set_index(['ID1','ID2'])
In [61]:
%timeit df1.loc[(900000498,900022133), 'Proximity']
%timeit df.loc[(df['ID1']==900000498)&(df['ID2']==900022133), 'Proximity']
1000 loops, best of 3: 565 µs per loop
100 loops, best of 3: 1.69 ms per loop
您可以看到,一旦cols形成索引,则查找比过滤操作快3倍。
输出几乎相同:
In [63]:
print(df1.loc[(900000498,900022133), 'Proximity'])
print(df.loc[(df['ID1']==900000498)&(df['ID2']==900022133), 'Proximity'])
3.9
8 3.9
Name: Proximity, dtype: float64