2

我有以下数据框:

Date     Value1   Value2
01-01-01     01       01
02-01-01     02       00
03-01-01     03       01
04-01-01     04      101

在此数据框中,我只想选择具有Value2==0 and Value2>=100

为此,我使用以下命令:

data.loc[(data['Value2'] == 0) & (data['Value2'] >= 100)]

这给我一个空的DataFrame。我真的不明白为什么,因为当我单独使用时:

data.loc[(data['Value2'] == 0)]

或者:

data.loc[(data['Value2'] >= 100)

它返回更正后的值。有谁知道如何实现这两个条件选择?

4

2 回答 2

5

对于您的实际输入,正确的输出为空DataFrame。条件

(data['Value2'] == 0) & (data['Value2'] >= 100)

不能同时为。请改用or运算符。

(data['Value2'] == 0) | (data['Value2'] >= 100)

输出

    Date     Value1   Value2
02-01-01     02       00
04-01-01     04      101
于 2018-06-07T07:51:56.180 回答
1

我会使用 | 此示例中的运算符,因为一个值不能等于指定的值 AND 等于另一个。在我的示例中,我没有使用 .loc 函数来查找结果,而是简单地使用了 print 函数来说明这一点:

import datetime
import pandas as pd

dates = [datetime.datetime(2001, 1, 1), datetime.datetime(2001, 2, 1),   datetime.datetime(2001, 3, 1), datetime.datetime(2001, 4, 1)]
dates_2 = []

for date in dates:
   date = date.strftime('%y-%m-%d')
   dates_2.append(date)

df = pd.DataFrame({'Value1':[01, 02, 03, 04], 'Value2':[01, 00, 01, 101]}, index=dates)

print(df[(df['Value2'] == 0) | (df['Value2'] >= 100)])

正如您在上面看到的,我们使用括号来评估两个条件,但不同之处在于我们使用了 | 本例中的运算符。您可能只是有一个逻辑错误。输出是:

               Value1  Value2
2001-02-01       2       0
2001-04-01       4     101

显然,使用 .loc 应该只返回列 Value2 的值。在这个例子中我只做了一个打印语句来说明更广泛的观点。

于 2018-06-07T08:38:46.380 回答