Python 提取pandas中的以下所有行

Python 提取pandas中的以下所有行,python,pandas,dataframe,Python,Pandas,Dataframe,我有以下数据帧: df A B 1 b0 2 a0 3 c0 5 c1 6 a1 7 b1 8 b2 以a开头的第一行是 df[df.B.str.startswith(“a”)] 我想提取B列中以a开头的第一行以及后面的每一行。我期望的结果如下 A B 2 a0 3 c0 5 c1 6 a1 7 b1 8 b2 如何做到这一点?一个选项是创建一个遮罩并使用它进行选择: mask = df.B.str.startswith("a") mask[~mask] = np.nan df[mask.f

我有以下数据帧:

df

A B
1 b0
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2
a
开头的第一行是

df[df.B.str.startswith(“a”)]

我想提取B列中以a开头的第一行以及后面的每一行。我期望的结果如下

A B
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2

如何做到这一点?

一个选项是创建一个遮罩并使用它进行选择:

mask = df.B.str.startswith("a")
mask[~mask] = np.nan
df[mask.fillna(method='ffill').fillna(0).astype(int) == 1]
另一个选项是构建索引范围:

first = df[df.B.str.startswith("a")].index[0]
df.ix[first:]

后一种方法假设“a”始终存在。

如果我正确理解了您的问题,下面是您的操作方法:

df = pd.DataFrame(data={'A':[1,2,3,5,6,7,8],
      'B' : ['b0','a0','c0','c1','a1','b1','b2']})
# index of the item beginning with a
index = df[df.B.str.startswith("a")].values.tolist()[0][0] 
desired_df = pd.concat([df.A[index-1:],df.B[index-1:]], axis = 1)
print desired_df
你会得到:


使用
idxmax
查找第一个
True

df.loc[df.B.str[0].eq('a').idxmax():]

   A   B
1  2  a0
2  3  c0
3  5  c1
4  6  a1
5  7  b1
6  8  b2

要选择任何“a”行之后的所有行,还是仅选择紧跟其后的行?(不幸的是,你的例子很难解释。也许你需要改变它来澄清。)谢谢你的回复。我编辑了我的示例和问题。我想提取以下所有行。)但您的示例显示了以下所有行以及“a”行。那么,你想要哪一个?另外,“a”行是否总是存在?我想提取“a”行和以下所有行。因此“a”行始终存在!谢谢合作。
df.loc[df.B.str[0].eq('a').idxmax():]

   A   B
1  2  a0
2  3  c0
3  5  c1
4  6  a1
5  7  b1
6  8  b2