熊猫搜索有效匹配条件的第一行

时间:2019-05-22 07:37:38

标签: python pandas

我有一个Pandas DataFrame,其中包含几百万行。我想根据条件ticker从行中选择一个值。

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

C

问题在于它是极其无效的。我想知道如何进行与all_matches= df.loc[C, "column_name"] first_match = next(iter(all_matches), 'no match') 类似的操作,但是在第一场比赛就停止了。

2 个答案:

答案 0 :(得分:3)

如果始终存在第一个值,请使用Series.iat快速获取第一个值:

var iso = Encoding.GetEncoding("ISO-8859-1");
string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".rtf";
System.IO.File.WriteAllText(fileName, body, iso); 

或者:

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

另一种解决方案是更改this

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

答案 1 :(得分:1)

我进行了测试,发现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)