Python Pandas:获取列匹配特定值的多行索引

时间:2016-08-02 14:03:31

标签: python pandas indexing

如果DataFrame列有xkyk,我们希望找到DataFrame的索引,其中xk和{的值{1}}。

我只对一列工作完全正常,但我不能让它适用于两个

yk ==0

我如何同时为b = (df[df['xk'] ==0]).index.tolist() xk执行此操作。

1 个答案:

答案 0 :(得分:3)

我认为您可以通过all检查比较子集True中的所有值是['xk', 'yk']

b = df[(df[['xk', 'yk']] == 0).all(1)].index.tolist()

另一个解决方案是使用&添加第二个条件:

b = (df[(df['xk']  == 0) & (df['yk'] == 0)].index.tolist())

样品:

df = pd.DataFrame({'xk':[0,2,3],
                   'yk':[0,5,0],
                   'aa':[0,1,0]})

print (df)
   aa  xk  yk
0   0   0   0
1   1   2   5
2   0   3   0

b = df[(df[['xk', 'yk']] == 0).all(1)].index.tolist()
print (b)
[0]

b1 = (df[(df['xk']  == 0) & (df['yk'] == 0)].index.tolist())
print (b1)
[0]

第二种解决方案更快:

#length of df = 3k
df = pd.concat([df]*1000).reset_index(drop=True)

In [294]: %timeit df[(df[['xk', 'yk']] == 0).all(1)].index.tolist()
1000 loops, best of 3: 1.21 ms per loop

In [295]: %timeit (df[(df['xk']  == 0) & (df['yk'] == 0)].index.tolist())
1000 loops, best of 3: 828 µs per loop