Python 3.x 如果任何列中的值介于两个值之间,请选择DataFrame中的行
我已经查过了,我认为我所做的应该是有效的,但事实并非如此。第一个条件(>=80)正在评估中,但第二个条件(=80)。任何(1)和(df1.valuesAh,我得到了。我需要。所有(1)对于Ah,我得到了。我需要。所有(1)对于这里是另一个想法,分离遮罩并使用&来连接:Python 3.x 如果任何列中的值介于两个值之间,请选择DataFrame中的行,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我已经查过了,我认为我所做的应该是有效的,但事实并非如此。第一个条件(>=80)正在评估中,但第二个条件(=80)。任何(1)和(df1.valuesAh,我得到了。我需要。所有(1)对于Ah,我得到了。我需要。所有(1)对于这里是另一个想法,分离遮罩并使用&来连接: import pandas as pd df = pd.DataFrame({'AP-1': [30, 32, 34, 31, 33, 35, 36, 38, 37], 'AP-2': [3
import pandas as pd
df = pd.DataFrame({'AP-1': [30, 32, 34, 31, 33, 35, 36, 38, 37],
'AP-2': [30, 32, 34, 80, 33, 35, 36, 38, 37],
'AP-3': [30, 32, 81, 31, 33, 101, 36, 38, 37],
'AP-4': [30, 32, 34, 95, 33, 35, 103, 38, 121],
'AP-5': [30, 32, 34, 31, 33, 144, 36, 38, 37],
'AP-6': [30, 32, 34, 31, 33, 35, 36, 110, 37],
'AP-7': [30, 87, 34, 31, 111, 35, 36, 38, 122],
'AP-8': [30, 32, 99, 31, 33, 35, 36, 38, 37],
'AP-9': [30, 32, 34, 31, 33, 99, 88, 38, 37]},
index=['1', '2', '3', '4', '5', '6', '7', '8', '9'])
# This is the actual frame you want
df = df.transpose()
m1 = (df >= 80).any(1)
m2 = ~(df >= 100).any(1) #<-- Invert the statement with ~
df2 = df.loc[m1&m2]
print(df2)
下面是另一个想法,分离遮罩并使用&来连接:
import pandas as pd
df = pd.DataFrame({'AP-1': [30, 32, 34, 31, 33, 35, 36, 38, 37],
'AP-2': [30, 32, 34, 80, 33, 35, 36, 38, 37],
'AP-3': [30, 32, 81, 31, 33, 101, 36, 38, 37],
'AP-4': [30, 32, 34, 95, 33, 35, 103, 38, 121],
'AP-5': [30, 32, 34, 31, 33, 144, 36, 38, 37],
'AP-6': [30, 32, 34, 31, 33, 35, 36, 110, 37],
'AP-7': [30, 87, 34, 31, 111, 35, 36, 38, 122],
'AP-8': [30, 32, 99, 31, 33, 35, 36, 38, 37],
'AP-9': [30, 32, 34, 31, 33, 99, 88, 38, 37]},
index=['1', '2', '3', '4', '5', '6', '7', '8', '9'])
# This is the actual frame you want
df = df.transpose()
m1 = (df >= 80).any(1)
m2 = ~(df >= 100).any(1) #<-- Invert the statement with ~
df2 = df.loc[m1&m2]
print(df2)
谢谢。我对pandas很陌生,从来没有见过像您在这里介绍的那样的实现。我想我更喜欢您的实现。@标记您如何编写代码是一个偏好问题。但是我更喜欢多行而不是少行(认为这样更清楚)。您使用m2=~(df>=100)有什么原因吗?与m2相对的任何(1)行=(df@MarkS主要是因为你是如何解决这个问题的:
如果任何列的值大于100,那么就排除它。
哦,我想我明白了。虽然它们产生的结果相当,但在一个大的数据集上,你的可能会运行得更快。任何一个都会更快终止。所有人每次都必须检查每一列。任何一个都会找到一个实例违反了我的要求,并当场选择退出。谢谢。我对pandas很陌生,从未见过像您在这里介绍的那样的实现。我想我更喜欢您的实现。@标记您如何编写代码是一个偏好问题。不过,我更喜欢多行而不是少行(这样更清楚).你选择m2=~(df>=100)有什么原因吗(df@MarkS主要是因为你是如何解决这个问题的:如果任何列的值大于100,那么就排除它。
哦,我想我明白了。虽然它们产生的结果相当,但在一个大的数据集上,你的可能会运行得更快。任何一个都会更快终止。所有人每次都必须检查每一列。任何一个都会找到一个实例违反了我的要求,并当场选择退出。
1 2 3 4 5 6 7 8 9
AP-2 30 32 34 80 33 35 36 38 37
AP-8 30 32 99 31 33 35 36 38 37
AP-9 30 32 34 31 33 99 88 38 37