我有一个带有几列(words, start time, stop time, speaker
)的pandas数据框:
word
列中的所有值,而data
列中的值不变,或者meta_data
列中的值不变。start
值和最后一个单词的stop
值。我目前有:
word start stop data meta_data
0 but 2.72 2.85 2 9
1 that's 2.85 3.09 2 9
2 alright 3.09 3.47 2 1
3 we'll 8.43 8.69 1 4
4 have 8.69 8.97 1 4
5 to 8.97 9.07 1 4
6 okay 9.19 10.01 2 2
7 sure 10.02 11.01 2 1
8 what? 11.02 12.00 1 4
但是,我想将其转换为:
word start start data meta_data
0 but that's 2.72 3.09 2 9
1 alright 3.09 3.47 2 1
2 we'll have to 8.43 9.07 1 4
3 okay 9.19 10.01 2 2
4 sure 10.02 11.01 2 1
5 what? 11.02 12.00 1 4
答案 0 :(得分:3)
这需要创建一个帮助键,然后我们clear
+ shift
根据该键创建组密钥
cumsum
答案 1 :(得分:2)
在这里做一些数学运算 + GroupBy.agg
s=df['data']+df['meta_data']
groups=s.ne(s.shift()).cumsum()
new_df=( df.groupby(groups)
.agg({'word':' '.join,'start':'min',
'stop':'max','data':'first',
'meta_data':'first'}) )
print(new_df)
word start stop data meta_data
1 but that's 2.72 3.09 2 9
2 alright 3.09 3.47 2 1
3 we'll have to 8.43 9.07 1 4
4 okay 9.19 10.01 2 2
5 sure 10.02 11.01 2 1
6 what? 11.02 12.00 1 4
如果您认为总和可以分为两个不同且连续的组,则可以使用稍微复杂一点的带小数的函数
p=(df['data']+0.1723).pow(df['meta_data']+2.017)
groups=p.ne(p.shift()).cumsum()