两列整数之间的数字
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.Series
的 logical 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
我有以下代码:
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.Series
的 logical 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