我有以下数据集:
df = pd.DataFrame(np.random.rand(50,2), columns=list('AB'))
Run Code Online (Sandbox Code Playgroud)
绘图数据
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')
Run Code Online (Sandbox Code Playgroud)
我想在绿色区域中选择点(请参见下图)。第二象限中的点很容易选择,但第三象限中绿色区域中的点不容易选择。
这就是我在第二象限中选择点的方式:
df[( df['A'] < 0.4) & (df['B'] > 0.4)]
Run Code Online (Sandbox Code Playgroud)
之后,我被卡住了。
考虑到条件可能会变得复杂,例如处理曲线等。解决此问题的最佳方法是什么?
打开任何建议。
因为我承诺了一个解决方案,所以这里是一个不使用 functools 的解决方案:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
np.random.seed(42)
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')
# the next line is the one selecting all datapoints within
sub_df = df[(( df['A'] < 0.4) & (df['B'] > 0.4)) | (df['B'] < 0.4) & (df['A'] < (0.2 + 0.25*df['B']))]
plt.scatter(sub_df['A'], sub_df['B'], marker='x', color='red')
plt.xlabel('A')
plt.ylabel('B')
plt.show()
Run Code Online (Sandbox Code Playgroud)
该子句df['A'] < (0.2 + 0.25*df['B'])仅描述一个线性函数。您可以将其替换为其他任何值(例如指数函数)。
上面代码的结果图:
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |