Pandas搜索第一行匹配条件有效

2024-04-19 06:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我的代码如下:

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

问题是它是极其无效的。我想知道怎么可能做类似于df.loc[C, "column_name"]的事情,但是在第一场比赛中就停止了。你知道吗


Tags: 数据no代码namedfmatchcolumnall
2条回答

如果始终存在第一个值,请使用^{}快速获取第一个值:

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

或:

df.loc[C, "column_name"].values[0]

另一个解决方案是改变this

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

我测试了一下,发现atiat快。其他的不适合,因为他们要么不赞成或他们是矢量抓取。你知道吗

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)

相关问题 更多 >