如何在匹配的列值上垂直合并数据框

时间:2019-06-18 20:08:55

标签: python python-3.x pandas

我正在将15分钟的2个人对话的音频文件发送到转录/扬声器区分服务。在某些情况下,我需要将15分钟的文件分成3个5分钟的文件。不幸的是,说话者标签在各个块之间并不一致,但是我需要它们进行分析。

例如,在第一个文件中,扬声器标记为“ 0”和“ 1”。但是,在第二个文件中,它们分别标记为“ 1”和“ 2”。在第三个文件中,它们可以分别标记为“ 1”和“ 0”。这是一个问题,因为我需要一致的标签。

我目前的方法是表示数据帧中每个块的数据。为了参考跨数据框的标签,我将每个数据框重叠了10秒钟。我想合并“笔录”,“开始”和/或“开始”列匹配的每个数据框。

然后,我想基于重叠的值修改新合并的数据帧上的说话者标签方案以匹配先前的数据帧。

这是数据框1的样子:

  

df

                transcript  start  stop  speaker_label
0              hello world    1.2   2.2              0
1  why hello, how are you?    2.3   4.0              1
2          fine, thank you    4.1   5.0              0

这是数据框2的外观。请注意,由于重叠,第一行与上一个数据帧的最后一行如何匹配,但是现在Speaker_label方案有所不同。

  

df1

                          transcript  start  stop  speaker_label
0                    fine, thank you    4.1   5.0              1
1          you?(should be speaker 0)    5.1   6.0              1
2  good, thanks(should be speaker 1)    6.1   7.0              2

这就是我想要的,数据帧在“起始”值匹配的地方垂直合并,并且具有“ df1”“ speaker_label”方案与“ df”方案匹配。

  

ideal_df

                          transcript  start  stop  speaker_label
0                        hello world    1.2   2.2              0
1            why hello, how are you?    2.3   4.0              1
2                    fine, thank you    4.1   5.0              0
3          you?(should be speaker 0)    5.1   6.0              0
4  good, thanks(should be speaker 1)    6.1   7.0              1

2 个答案:

答案 0 :(得分:1)

您可以使用pd.concat垂直合并/合并。您可以参考Pandas merging concat join examples

ideal_df=pd.concat([df,df1])
ideal_dfdrop_duplicates(keep='first',inplace=True)

答案 1 :(得分:0)

尝试去做;):

import pandas as pd
df1 = pd.DataFrame({'c1':['titi','toto','tutu'], 'c2': [0,1,0]})
df2 = pd.DataFrame({'c1':['tata','tete','titi'], 'c2': [1,1,0]})

df = pd.concat([df1, df2])
df.drop_duplicates(keep='first')