首页 > 解决方案 > 选择线上方/下方的点

问题描述

我有以下数据集:

df = pd.DataFrame(np.random.rand(50,2), columns=list('AB'))

绘制数据

plt.scatter(x=df.A, y=df.B)

x = plt.axhline(y=0.4,c='k')
y = plt.axvline(x=0.4,c='k')
plt.plot([0.2, 0.3], [0, 0.4], c='k')

我想选择绿色区域中的点(见下图)。第二象限的点很容易选择,但第三象限的绿色区域的点却不好选。

这就是我在第二象限中选择点的方式:

df[( df['A'] < 0.4) & (df['B'] > 0.4)]

在此之后我被卡住了。

考虑到条件可能会变得复杂,比如处理曲线等。解决这个问题的最佳方法是什么?

打开任何建议。

在此处输入图像描述

标签: pythonpandas

解决方案


我建议你可以使用 functools:

import numpy as np
import functools

cr1 = functools.reduce(np.logical_and, [df.B < 0.4, df.A < 0.2])
cr2 = functools.reduce(np.logical_and, [df.B < 0.4, df.A > 0.2, df.B > (df.A-0.2)*4])
df_filtered = df[functools.reduce(np.logical_or, [cr1,cr2])]

推荐阅读