如何在Pandas中获取一组列等于给定值的行?

时间:2017-10-05 09:14:26

标签: python python-3.x pandas

我有一个包含许多列的数据框(大约1000个)。 给定一组列(大约10),其中0或1为值,我想在上述列集中选择我有1的所有行。

玩具示例。我的数据框是这样的:

c1,c2,c3,c4,c5
'a',1,1,0,1
'b',0,1,0,0
'c',0,0,1,1
'd',0,1,0,0
'e',1,0,0,1

我想得到列c2和c5等于1的行:

'a',1,1,0,1
'e',1,0,0,1

哪种方式最有效?

谢谢!

3 个答案:

答案 0 :(得分:1)

对于多列cols

,这将更通用
In [1277]: cols = ['c2', 'c5']

In [1278]: df[(df[cols] == 1).all(1)]
Out[1278]:
    c1  c2  c3  c4  c5
0  'a'   1   1   0   1
4  'e'   1   0   0   1

或者,

In [1284]: df[np.logical_and.reduce([df[x]==1 for x in cols])]
Out[1284]:
    c1  c2  c3  c4  c5
0  'a'   1   1   0   1
4  'e'   1   0   0   1

或者,

In [1279]: df.query(' and '.join(['%s==1'%x for x in cols]))
Out[1279]:
    c1  c2  c3  c4  c5
0  'a'   1   1   0   1
4  'e'   1   0   0   1

答案 1 :(得分:0)

你可以尝试这样做:

df.loc[df['c2'] == 1 & df['c5'] == 1]

答案 2 :(得分:0)

map $uri $myvar{
    default $uri;
    # pattern "Method1" + "/" + GUID + "/" + target parameter + "/" + HASH;
    "~*/Method1/(.*)/(.*)/(.*)$" $2;
    # pattern "Method2" + "/" + GUID + "/" + target parameter;
    "~*/Method2/(.*)/(.*)$" $2;
}


upstream backend {
    hash $myvar consistent;
    server s1:80;
    server s2:80;
}