给定一个包含列 xk
和 yk
的DataFrame
,我们希望找到 xk
和 yk == 0
值的索引。
当只有一个列时,它可以正常工作,但对于两个列我无法使其正常工作。
b = (df[df['xk'] ==0]).index.tolist()
如何同时对xk
和yk
进行操作。
我认为你可以通过使用all
函数来检查在比较的子集['xk', 'yk']
中是否所有值都为True
:
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
然后你得到 DataFrame -
a = (df.ix[(df['xk'] == 0) & (df['yk'] == 0)])`。你需要返回例如第一个索引或第二个索引位置的值吗? - jezrael