Python Pandas:布尔/谓词搜索的首选习惯用法

Python Pandas:布尔/谓词搜索的首选习惯用法,python,pandas,Python,Pandas,我有两个问题,它们都在下面的帖子中 考虑这个数据帧: from pandas import DataFrame df_1 = DataFrame ({ "x" : ["a - {}".format(i) for i in range(2)] + ["b - {}".format(i) for i in range(2)] , "y" : range(4) }) df_1 假设我想要x值以字母“a”开头的所有行 以下是此类

我有两个问题,它们都在下面的帖子中

考虑这个数据帧:

from pandas import DataFrame

df_1 = DataFrame ({
        "x" : ["a - {}".format(i) for i in range(2)] + 
              ["b - {}".format(i) for i in range(2)] ,
        "y" : range(4)
    })
df_1

假设我想要
x
值以字母“a”开头的所有行

以下是此类搜索的首选习惯用法吗?

df_1[df_1["x"].apply(lambda val : val.startswith("a"))]
df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]

我在Pandas中发现的一件事是,一旦有意义的数据成为
DataFrame
索引,就很难用它做事情,尤其是查询它。假设我们现在有:

df_2 = df_1.set_index(["x"], drop=True)
df_2

我发现做同样的搜索,如果我搜索索引,需要做更多的工作

以下是此类搜索的首选习惯用法吗?

df_1[df_1["x"].apply(lambda val : val.startswith("a"))]
df_2.iloc[[i for i,val in enumerate(df_2.index.tolist()) if val.startswith("a")], :]

在这两种情况下,我都会使用向量化的
.str.startswith(…)
方法。它不一定性能更好,只是更干净。有关更多信息,请参阅

In [22]: df_1[df_1["x"].str.startswith("a")]
Out[22]: 
       x  y
0  a - 0  0
1  a - 1  1

In [23]: df_2[df_2.index.str.startswith('a')]
Out[23]: 
       y
x       
a - 0  0
a - 1  1

我不知道这些
str
方法。这打开了一个全新的世界。谢谢!