首页 > 解决方案 > 如何为数据框中的两个特定列选择两个数字之间的值以绘制为二维图

问题描述

我有一张这样的桌子。我想为 0.120<Y<0.210 的值绘制 X 与 Y。我找不到一个开始的地方,它会在这个范围内返回 X 和 Y 的值。任何帮助深表感谢。

X 和 Y 值表:

X 和 Y 值表

标签: pythondataframe

解决方案


由于您无法找到起点,我将首先收集您的数据并声明变量以保存 x 和 y 数据。

y_vals = [0.113, 0.117, 0.123, 0.129, 0.130, 0.160, 0.180, 0.210, 0.220, 0.260, 0.280]
x_vals = list(range(0, (len(y_vals)*10), 10))

上面,我初始化y_vals为一个包含每个 y 值的列表。对于x_vals,我将其初始化为随y_vals. 例如,如果您要向 中添加更多 y 值y_vals,则yx_vals将随之增长。x_vals利用range()功能成长。您可以在此处阅读有关此功能的更多信息。

现在我们有了数据,是时候进入问题的核心了。

def getPoints(x_vals, y_vals):
    points = []
    for i in range(0, len(y_vals) - 1):
        if ((y_vals[i] > 0.120) & (y_vals[i] < 0.140)):
            x = x_vals[i]
            y = y_vals[i]
            points.append([x, y])
    return points

上面,该方法getPoints()负责查找介于 0.120 和 0.140 之间的值,并将这些点编译成一个列表。此函数返回一个带有嵌套列表的列表,这些列表将点显示为[x, y]


编辑:我以前使用库中的arange()函数numpy来检查数字是否在您的范围内。但是,不会以 100% 的精度存储,并且由于可以存储floats的值的数量,通常会导致舍入。float更简单的方法是使用比较来简单地检查数字是否在两个数字之间。例如:

if ((y_vals[i] > 0.120) & (y_vals[i] < 0.140))

现在,是时候将数据传递给getPoints()函数了。

points = getPoints(x_vals, y_vals)
print(points)

输出如下:

[[20, 0.13], [30, 0.129], [40, 0.123]]



完整脚本:

def getPoints(x_vals, y_vals):
    points = []
    for i in range(0, len(y_vals) - 1):
        if ((y_vals[i] > 0.120) & (y_vals[i] < 0.140)):
            x = x_vals[i]
            y = y_vals[i]
            points.append([x, y])
    return points

y_vals = [0.113, 0.117, 0.123, 0.129, 0.130, 0.160, 0.180, 0.210, 0.220, 0.260, 0.280]
x_vals = list(range(0, (len(y_vals)*10), 10))
points = getPoints(x_vals, y_vals)
print(points)

希望对您有所帮助:) 如果您有任何问题,请随时发表评论。


推荐阅读