首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pandas:根据一列中字符串的特定组合选择行对

问Pandas:根据一列中字符串的特定组合选择行对
EN

Stack Overflow用户
提问于 2021-07-10 00:01:56
回答 2查看 57关注 0票数 2

我是python/pandas的新手,一直在努力寻找一个足够具体的示例供我使用。

假设我有以下pandas数据帧,由一列事件标记和一列显示每个标记出现的时间组成:

代码语言:javascript
复制
 df = pd.DataFrame({'Marker': ['S200', 'S4', 'S44', 'Tone', 'S200', 'S1', 'S44', 'Tone'], 
                    'Time': [0, 100, 150, 230, 300, 340, 380, 400]})

  Marker  Time
0   S200     0
1     S4   100
2    S44   150
3   Tone   230
4   S200   300
5     S1   340
6    S44   380
7   Tone   400

我想提取S44后面跟着一个音调的行对。生成的输出应为:

代码语言:javascript
复制
newdf = pd.DataFrame({'Marker': ['S44', 'Tone', 'S44', 'Tone'],
                   'Time': [150, 230, 380, 400]})

  Marker  Time
0    S44   150
1   Tone   230
2    S44   380
3   Tone   400

任何想法都将不胜感激!

EN

回答 2

Stack Overflow用户

发布于 2021-07-10 00:07:12

一种方法是使用shift来获取索引,加1并使用loc拉取-请注意,这假设索引是数值和单调递增的:

代码语言:javascript
复制
index = df.loc[df.Marker.shift(-1).eq('Tone') & (df.Marker.eq('S44'))].index

df.loc[index.union(index +1)]
 
  Marker  Time
2    S44   150
3   Tone   230
6    S44   380
7   Tone   400
票数 3
EN

Stack Overflow用户

发布于 2021-07-10 00:07:50

另一种方式:

代码语言:javascript
复制
s = ((df.Marker.eq('S44')) & (df.Marker.shift(-1).eq('Tone')))
df = df[s | s.shift()]

输出:

代码语言:javascript
复制
  Marker  Time
2    S44   150
3   Tone   230
6    S44   380
7   Tone   400
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68319727

复制
相关文章

相似问题

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