Python - 双重条件 data.loc
Python - Double condition data.loc
我有以下数据框:
Date Value1 Value2
01-01-01 01 01
02-01-01 02 00
03-01-01 03 01
04-01-01 04 101
在这个数据框上,我想 select 只有具有 Value2==0 and Value2>=100
的行
为此,我使用以下命令:
data.loc[(data['Value2'] == 0) & (data['Value2'] >= 100)]
哪个 return 我是一个空的 DataFrame。我不太明白为什么,因为当我单独使用时:
data.loc[(data['Value2'] == 0)]
或:
data.loc[(data['Value2'] >= 100)
它return是更正后的值。
有谁知道如何实现这两个条件 selection?
对于您的实际输入,正确的输出是空的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
我会使用 |此示例中的运算符,因为值不能等于指定值并且等于另一个值。在我的例子中我没有使用.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 应该只是 return 列 Value2 的值。我在这个例子中只做了一个打印语句来说明更广泛的观点。
我有以下数据框:
Date Value1 Value2
01-01-01 01 01
02-01-01 02 00
03-01-01 03 01
04-01-01 04 101
在这个数据框上,我想 select 只有具有 Value2==0 and Value2>=100
为此,我使用以下命令:
data.loc[(data['Value2'] == 0) & (data['Value2'] >= 100)]
哪个 return 我是一个空的 DataFrame。我不太明白为什么,因为当我单独使用时:
data.loc[(data['Value2'] == 0)]
或:
data.loc[(data['Value2'] >= 100)
它return是更正后的值。 有谁知道如何实现这两个条件 selection?
对于您的实际输入,正确的输出是空的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
我会使用 |此示例中的运算符,因为值不能等于指定值并且等于另一个值。在我的例子中我没有使用.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 应该只是 return 列 Value2 的值。我在这个例子中只做了一个打印语句来说明更广泛的观点。