我有一个包含几列的 Dataframe -为了简单起见,列A是一列严格递增的整数。
A B ...
103
222
383
432
799
1089
...
我想根据列A的阈值来过滤 Dataframe ,例如750。我可以执行类似df[df['A'] < 750]
的操作来实现这一点。这会导致:
A B ...
103
222
383
432
...
但是,我也想在这个阈值之后直接包含这个值-例如,结果 Dataframe 也应该包含799行。
A B ...
103
222
383
432
799
...
一个笨拙的方法是将pd.concat
这两个 Dataframe df[df['A'] < 750]
和df[df['A'] >= 750].iloc[0]
放在一起-它本质上是原始过滤器加上750后面的单行,即799,因此是iloc[0]
。是否有某种内置方法可以实现此结果,而无需手动concat?
2条答案
按热度按时间oxiaedzo1#
您可以尝试使用
idxmax
查找第一个真值,其中df['A']
大于750。请注意,
loc
将创建原始帧的切片,因此,如果要在切片上执行其他操作,可能需要创建.copy()
或者,如果你想使用小于,使用
idxmin
,它将找到第一个false值的索引为False == 0
xghobddn2#
你可以使用
Series.searchsorted
,假设 Dataframe 是按A
值排序的。这应该非常快。默认情况下,searchsorted的side是
left
,因为你首先想过滤〈750,然后包括下一个更高的元素到750,那么side=left应该是好的。输出(具有组成的“B”值):