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



我对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

最新更新