另一种方法是使用pandas.DataFrame的.loc方法,该方法返回符合布尔索引条件的行的索引位置:df.loc[(df['256'] != df['Z'])].index
输出:Int64Index([1, 3], dtype='int64')
这恰好是列出的实现中最快的一个,如ipython notebook:import pandas as pd
import numpy as np
df = pd.DataFrame({"256":np.random.randint(0,10,1594), "Z": np.random.randint(0,10,1594)})
%timeit df.loc[(df['256'] != df['Z'])].index
%timeit row_ids = df[df["256"] != df.Z].index
%timeit rows = list(df[df['256'] != df.Z].index)
%timeit df[df['256'] != df['Z']].index
输出:1000 loops, best of 3: 352 µs per loop
1000 loops, best of 3: 358 µs per loop
1000 loops, best of 3: 611 µs per loop
1000 loops, best of 3: 355 µs per loop
然而,当它降到5-10微秒时,并没有显著的区别,但是如果在未来你有一个非常大的数据集,那么时间和效率可能会成为一个更重要的问题。对于您相对较小的1594行的数据集,我将采用看起来最优雅、提高可读性的解决方案。