Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python数据帧:取小于的最大值_Python_Pandas_Dataframe - Fatal编程技术网

Python数据帧:取小于的最大值

Python数据帧:取小于的最大值,python,pandas,dataframe,Python,Pandas,Dataframe,在Python中,我有一个数据帧。我想筛选列A的一个值 我正在查找行,其中列A是小于“5”的最大值(因此,如果列A的值为“1”、“2”、“4”、“7”,则应为“4”)。另一种情况也存在 下面的语句不起作用 我必须如何在最大条件下改变它,使其工作 df_new = df[(df['some_other_column'] < XYZ) & max(df['A'] <= '5')] df_new=df[(df['some_other_column']

在Python中,我有一个数据帧。我想筛选列
A
的一个值

我正在查找行,其中列
A
是小于“5”的最大值(因此,如果列
A
的值为“1”、“2”、“4”、“7”,则应为“4”)。另一种情况也存在

下面的语句不起作用

我必须如何在最大条件下改变它,使其工作

df_new = df[(df['some_other_column'] < XYZ) & max(df['A'] <= '5')]

df_new=df[(df['some_other_column']
下面就是其中的诀窍(请原谅变量命名不当):-

[1]中的
:将熊猫作为pd导入
…:df=pd.DataFrame({'x':[1,2,4,7]})
…:x=df['x']

…:maxist_-smaller_-than_-5=x[x另一个条件实际上与根本问题无关,因此我将忽略它

下面就是其中的诀窍(请原谅变量命名不当):-

[1]中的
:将熊猫作为pd导入
…:df=pd.DataFrame({'x':[1,2,4,7]})
…:x=df['x']

…:最大值小于5=x[x使用
np.searchsorted
-

df

   x
0  1
1  2
2  4
3  7

df.iloc[(np.searchsorted(df.x.values, 5) - 1).clip(0)]

   x
2  4

计时

df = pd.DataFrame({'x' : np.arange(100000)})

没有比较,使用
searchsorted
要快得多。

使用
np.searchsorted
-

df

   x
0  1
1  2
2  4
3  7

df.iloc[(np.searchsorted(df.x.values, 5) - 1).clip(0)]

   x
2  4

计时

df = pd.DataFrame({'x' : np.arange(100000)})

没有比较,使用
searchsorted
要快得多。

这不是使用了列被排序的假设吗?确实如此。但是如果您将argsorted索引作为“sorter”传递给函数,您可以用最小的麻烦来修复它参数。它最多返回一行,这可能是不可取的。另外,请您使用排序器更新您的答案,并在生成部分的x列中添加一个
np.random.permutation
,我很好奇,当索引正好等于该值时,如何优化此位。另外,请注意,iloc参数必须是mod如果要在多列数据帧中拉出特定列值,请执行此操作。使用此操作将拉出一个系列。@Jon不完全正确!虽然此方法适用于系列和框架,但它将返回框架的所有列,除非您将列名/位置列表指定为loc/iloc的第二个参数。这不是使用假设o吗但如果将argsorted索引作为“sorter”传递给函数,则可以用最小的麻烦来修复该问题参数。它最多返回一行,这可能是不可取的。另外,请您使用排序器更新您的答案,并在生成部分的x列中添加一个
np.random.permutation
,我很好奇,当索引正好等于该值时,如何优化此位。另外,请注意,iloc参数必须是mod如果要在多列数据帧中拉出特定列值,则此方法无效。使用此方法将拉出一个系列。@Jon不完全正确!虽然此方法适用于系列和框架,但它将返回框架的所有列,除非将列名/位置列表指定为loc/iloc的第二个参数。
%timeit df.iloc[(np.searchsorted(df.x.values, 12345) - 1).clip(0)]
10000 loops, best of 3: 139 µs per loop