我正在尝试从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多个布尔标准串起来。
答案 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运算符。