Python 熊猫会高效地搜索匹配条件的第一行

Python 熊猫会高效地搜索匹配条件的第一行,python,pandas,Python,Pandas,我有一个包含数百万行的熊猫数据框。我想根据条件C从行中选择一个值 我有以下正在运行的代码: all_matches= df.loc[C, "column_name"] first_match = next(iter(all_matches), 'no match') 问题是它是极其无效的。我想知道如何做类似于df.loc[C,“column_name”],但在第一次匹配时停止的事情。如果始终有第一个值用于快速获取第一个值: df.loc[C, "column_name"].iat[0] 或:

我有一个包含数百万行的熊猫数据框。我想根据条件
C
从行中选择一个值

我有以下正在运行的代码:

all_matches= df.loc[C, "column_name"]
first_match = next(iter(all_matches), 'no match')

问题是它是极其无效的。我想知道如何做类似于
df.loc[C,“column_name”]
,但在第一次匹配时停止的事情。

如果始终有第一个值用于快速获取第一个值:

df.loc[C, "column_name"].iat[0]
或:

另一个解决方案是改变:


我测试了一下,发现at比iat快。其他的不适合,因为它们要么不推荐使用,要么是矢量捕捉器

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(100, 100))

%timeit df.iat[50,50]=50 # ✓
%timeit df.at[50,50]=50 #  ✔
%timeit df.set_value(50,50,50) # will deprecate
%timeit df.iloc[50,50]=50
%timeit df.loc[50,50]=50

7.06 µs ± 118 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.52 µs ± 64.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3.68 µs ± 80.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
98.7 µs ± 1.07 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
109 µs ± 1.42 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
df = pd.DataFrame({'column_name':['a','b','va'],
                   'col':[1,2,3]})
from numba import njit

@njit
def get_first_val_nb(A, B, k):
    for i in range(len(A)):
        if A[i] > k:
            return B[i]
    return 'no match'

A = df['col'].values
B = df['column_name'].values

idx = get_first_val_nb(A,B, 2)
print (idx)
va
import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(100, 100))

%timeit df.iat[50,50]=50 # ✓
%timeit df.at[50,50]=50 #  ✔
%timeit df.set_value(50,50,50) # will deprecate
%timeit df.iloc[50,50]=50
%timeit df.loc[50,50]=50

7.06 µs ± 118 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
5.52 µs ± 64.2 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3.68 µs ± 80.8 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
98.7 µs ± 1.07 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
109 µs ± 1.42 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)