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

wqlqzqxt  于 2021-09-08  发布在  Java
关注(0)|答案(2)|浏览(280)

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

任何想法都将不胜感激!

lhcgjxsq

lhcgjxsq1#

一种方法是使用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
2wnc66cl

2wnc66cl2#

另一种方式:

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

相关问题