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)