首页 > 解决方案 > 如何根据熊猫另一列中前一行的值组合一行中的值

问题描述

我有一个带有几列(单词、开始时间、停止时间、扬声器)的熊猫数据框。我想合并 'word' 列中的所有值,而 'speaker' 列中的值不变。此外,我想保留组合中第一个单词的“开始”值和最后一个单词的“停止”值。每次扬声器来回变化时,我都想将此组合作为新行返回。

我目前拥有的前 9 行是(整个数据帧持续一段时间,扬声器来回改变):

      word    start  stop      speaker
0      but   2.72  2.85        2
1   that's   2.85  3.09        2
2  alright   3.09  3.47        2
3    we'll   8.43  8.69        1
4     have   8.69  8.97        1
5       to   8.97  9.07        1
6     okay   9.19 10.01        2
7     sure  10.02 11.01        2
8    what?  11.02 12.00        1

但是,我想把它变成(在这个例子之外的整个数据框中继续):

       word        start  stop speaker
0  but that's alright  2.72  3.47  2
1       we'll have to  8.43  9.07  1
2           okay sure  9.19 11.01  2
3               what? 11.02 12.00  1

标签: pythonpandas

解决方案


您需要对扬声器的连续值进行分组。

df.groupby([(df['speaker'] != df['speaker'].shift()).cumsum(), , df['speaker']], as_index=False).agg({
    'word': ' '.join,
    'start': 'min',
    'stop': 'max'
})

输出:

   speaker                word  start   stop
0        2  but that's alright   2.72   3.47
1        1       we'll have to   8.43   9.07
2        2           okay sure   9.19  11.01
3        1               what?  11.02  12.00

推荐阅读