pandas中的多个多列选择

时间:2017-12-08 23:31:45

标签: python pandas

我正在尝试从pandas数据框中进行多个多列选择,并且似乎找不到一种优雅的方法来完成它。

设置:

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randint(0,100,size=(100, 8)),columns=list('ABCDEFGH'))

让我们说我想找到数据框的行,其中列为' A'和' B'大于50,我会做这样的事情:

df[['A', 'B']].where(lambda x: x > 50).dropna()

现在让我们说我也想选择专栏' E'和' F'他们不到25岁。

我如何做到这一点?

注意:在实际数据集中,[' A'' B']可以是一组非连续的10+列, [' E'' F']也可以是一组非连续的10+列。我有每组标准的列名列表。所以我想避免使用('A' > 50) & ('B' > 50),因为我必须将30多个布尔标准串起来。

1 个答案:

答案 0 :(得分:1)

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0,100,size=(100, 8)),columns=list('ABCDEFGH'))

定义要约束的列:

columns1 = ['A', 'B', 'C', 'E']
columns2 = ['D', 'F']

定义和应用约束

constraint1 = (df[columns1] > 50).all(axis =1)
constraint2 = (df[columns2] < 50).any(axis =1)
print df[constraint1 & constraint2]

注意:

.any(axis = 1)在将约束应用于列时充当OR运算符。

.all(axis = 1)在将约束应用于列时充当AND运算符。