首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取pandas中的所有以下行

提取pandas中的所有以下行
EN

Stack Overflow用户
提问于 2017-01-31 12:18:02
回答 3查看 190关注 0票数 2

我有以下熊猫DataFrame:

df

代码语言:javascript
运行
复制
A B
1 b0
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2

a开头的第一行是

df[df.B.str.startswith("a")]

代码语言:javascript
运行
复制
A B
2 a0

我想提取B列中以a开头的第一行,以及之后的每一行。我想要的结果如下

代码语言:javascript
运行
复制
A B
2 a0
3 c0
5 c1
6 a1
7 b1
8 b2

如何做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-31 12:31:58

一种选择是创建蒙版并使用它进行选择:

代码语言:javascript
运行
复制
mask = df.B.str.startswith("a")
mask[~mask] = np.nan
df[mask.fillna(method='ffill').fillna(0).astype(int) == 1]

另一种选择是构建索引范围:

代码语言:javascript
运行
复制
first = df[df.B.str.startswith("a")].index[0]
df.ix[first:]

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

票数 3
EN

Stack Overflow用户

发布于 2017-01-31 12:39:51

如果我没理解错你的问题,下面是你是怎么做的:

代码语言:javascript
运行
复制
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

然后你会得到:

票数 2
EN

Stack Overflow用户

发布于 2017-01-31 14:22:56

使用idxmax查找第一个True

代码语言:javascript
运行
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41949559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档