我是python/pandas的新手,一直在努力寻找一个足够具体的示例供我使用。
假设我有以下pandas数据帧,由一列事件标记和一列显示每个标记出现的时间组成:
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后面跟着一个音调的行对。生成的输出应为:
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任何想法都将不胜感激!
发布于 2021-07-10 00:07:12
一种方法是使用shift来获取索引,加1并使用loc拉取-请注意,这假设索引是数值和单调递增的:
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发布于 2021-07-10 00:07:50
另一种方式:
s = ((df.Marker.eq('S44')) & (df.Marker.shift(-1).eq('Tone')))
df = df[s | s.shift()]输出:
Marker Time
2 S44 150
3 Tone 230
6 S44 380
7 Tone 400https://stackoverflow.com/questions/68319727
复制相似问题