我对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
任何想法都将不胜感激!
其中一种方法是使用shift来获取索引,加1并使用loc进行pull-请注意,这假设索引是数字且单调递增的:
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
另一种方式:
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 400