首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果任意列中的值介于两个值之间,则在DataFrame中选择行

如果任意列中的值介于两个值之间,则在DataFrame中选择行
EN

Stack Overflow用户
提问于 2018-07-07 16:48:04
回答 2查看 2.9K关注 0票数 2

我已经查过了,我认为我应该工作,但它不是,第一个条件(>= 80)正在评估,而第二个(<= 100)不是。

我希望每一行的任何列值都包含在80到100之间,但是,如果任何列值大于100,则排除它。

我应该只看到AP-2,AP-8和AP-9行。

代码语言:javascript
运行
复制
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'])


df1 = df.transpose()

print(df1)
print()

df2 = df1[(df1.values >= 80).any(1) & (df1.values <= 100).any(1)]

print(df2)

df2将以:1 2 3 4 5 6 7 8 9 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的形式出现

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-07 17:20:33

下面是另一个想法,分离掩码并使用&连接:

代码语言:javascript
运行
复制
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)

指纹:

代码语言:javascript
运行
复制
      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
票数 4
EN

Stack Overflow用户

发布于 2018-07-07 16:53:57

啊,我知道了。我需要.all(1)作为<= 100。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51225130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档