两列整数之间的数字

Numbers Between 2 Columns of Integers

我有以下代码:

NumDf = {'Num1' : [5,7,5,5,5,5,8,5,5,5,5,5,9,5,5,5,5,6,5,5,6], 'Num2' : [10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]}
NumDf = pd.DataFrame(NumDf)
NumDf

NumDf['Num1'] <= int(input('Input your number')) <= NumDf['Num2']
# the above code gives me an error

我的目标是在 NumDf 中生成另一列,其中包含上述等式的 True/False 值。然后我会为所有 True 值过滤 NumDf。

注意:上面的等式给我错误。如果用户输入的数字在数据框的所有行的 Num1 和 Num2 之间,我正在寻找一个 True 。示例:如果用户输入数字 6,则数据框的第一行为 True,第二行为 False。

您可以将您的测试值读入一个变量,然后创建一个新列作为两个条件的and

test = int(input('Input your number'))
NumDf['test'] = (NumDf['Num1'] <= test) & (NumDf['Num2'] >= test)

例如,如果输入为 6,则结果为:

    Num1  Num2   test
0      5    10   True
1      7    10  False
2      5    10   True
3      5    10   True
4      5    10   True
5      5    10   True
6      8    10  False
7      5    10   True
8      5    10   True
9      5    10   True
10     5    10   True
11     5    10   True
12     9    10  False
13     5    10   True
14     5    10   True
15     5    10   True
16     5    10   True
17     6    10   True
18     5    10   True
19     5    10   True
20     6    10   True

你得到了错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

因为在python中,a <= b <= c(a <= b) and (b <= c)的语法糖。

将其应用到你的案例中,你正在有效地做

(NumDf['Num1'] <= something) and (something <= NumDf['Num2'])

现在,NumDf['Num1'] <= something(something <= NumDf['Num2']) 一样为您提供了一个 系列 布尔值。对于 pandas.Serieslogical and 运算符的实现不知道如何处理 (a and b) 当这两者中的任何一个本身是 pandas.Series 个对象,因此它会抛出该错误。

解决办法是使用bitwiseand运算符,对两个Series进行运算element-wise。当然,由于您将不得不执行两个单独的比较,因此您将不得不在 进行这些比较之前请求输入

>>> num = int(input("Enter a number: "))
>>> (NumDf['Num1'] <= num) & (num <= NumDf['Num2'])

0      True
1     False
2      True
...
18     True
19     True
20     True
dtype: bool