python - 如何根据熊猫另一列中前一行的值组合一行中的值
问题描述
我有一个带有几列(单词、开始时间、停止时间、扬声器)的熊猫数据框。我想合并 '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
解决方案
您需要对扬声器的连续值进行分组。
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
推荐阅读
- javascript - 如何每 5 个值插入一个换行符?
- postgresql - 在 Postgres 11.6 中从循环开始时选择事件
- docker - Asp.Net Core docker-compose https 自签名证书问题
- oauth-2.0 - 尝试检索 Oauth access_token 时出现 AADSTS50146 错误
- python - 使用 f2py 在 python 中的 Fortran 基本函数
- pdf - 在 Google Apps 脚本中创建多个 PDF 时出错
- reactjs - 错误:当我在 React 中尝试使用 Jest 进行测试时,无法找到带有文本的元素
- c# - Interlocked.CompareExchange 单线程等效代码
- vue.js - 自动完成字符突出显示
- python - 如何在 python pandas 数据透视表中找到总共只有一列?