合并熊猫数据框时得到错误的结果

时间:2018-07-12 19:58:09

标签: python pandas

我有两个数据框,例如-

    identity time       Date    matched_time
0   197_$   21:21:21    9/11/2015   21:21:30
0   197_$   21:21:51    9/11/2015   21:22:00
0   197_$   21:22:21    9/11/2015   21:22:30
0   197_$   21:22:51    9/11/2015   21:23:00
0   197_$   21:23:21    9/11/2015   21:23:30
0   197_$   21:23:51    9/11/2015   21:24:00



 identity Line  Epoch   Day Seconds   Date        Time  
    197_$    9344   11203   4   280290  9/11/2015   1/1/1900 21:21  
    197_$    9345   11204   4   280320  9/11/2015   1/1/1900 21:22  
    197_$    9346   11205   4   280350  9/11/2015   1/1/1900 21:22  
    197_$    9347   11206   4   280380  9/11/2015   1/1/1900 21:23  
    197_$    9348   11207   4   280410  9/11/2015   1/1/1900 21:23  
    197_$    9349   11208   4   280440  9/11/2015   1/1/1900 21:24  

现在,我想合并这些列以创建一个新的数据框- 我做到了-

df2=pd.merge(df,out,how='outer')

但是没有获得所需的输出。我只是想创建一个包含所有列的数据框。

因此数据框应如下所示-

identity time       Date    matched_time      Line Epoch  ....
0   197_$  21:21:21    9/11/2015   21:21:30  9344  11203  ....
0   197_$  21:21:51    9/11/2015   21:22:00  9345  11204
0   197_$  21:22:21    9/11/2015   21:22:30  9346  11205
0   197_$  21:22:51    9/11/2015   21:23:00  9347  11206
0   197_$  21:23:21    9/11/2015   21:23:30  9348  11207
0   197_$  21:23:51    9/11/2015   21:24:00  9349  11208

1 个答案:

答案 0 :(得分:1)

通常,除非您至少在一侧(左侧或右侧)具有唯一键,否则不应使用merge()。而是使用concat() 如果两个数据框中的列相同。为简单起见,我省略了第二个数据帧的列Time

df1

    identity    time    Date    matched_time
0   197_$   21:21:21    9/11/2015   21:21:30
1   197_$   21:21:51    9/11/2015   21:22:00
2   197_$   21:22:21    9/11/2015   21:22:30
3   197_$   21:22:51    9/11/2015   21:23:00
4   197_$   21:23:21    9/11/2015   21:23:30
5   197_$   21:23:51    9/11/2015   21:24:00

df2

    identityLine    Epoch   Day Seconds Date
0   197_$   9344    11203   4   280290  9/11/2015
1   197_$   9345    11204   4   280320  9/11/2015
2   197_$   9346    11205   4   280350  9/11/2015
3   197_$   9347    11206   4   280380  9/11/2015
4   197_$   9348    11207   4   280410  9/11/2015
5   197_$   9349    11208   4   280440  9/11/2015

使用concat()组合2个数据帧:

df3 = (pd.concat([df1.set_index(['identity', 'Date']), 
                  df2.set_index(['identity', 'Date'])], 
                  axis=1).reset_index(drop=False))

输出(df3):

    identity    Date    time    matched_time    Line    Epoch   Day Seconds
0   197_$   9/11/2015   21:21:21    21:21:30    9344    11203   4   280290
1   197_$   9/11/2015   21:21:51    21:22:00    9345    11204   4   280320
2   197_$   9/11/2015   21:22:21    21:22:30    9346    11205   4   280350
3   197_$   9/11/2015   21:22:51    21:23:00    9347    11206   4   280380
4   197_$   9/11/2015   21:23:21    21:23:30    9348    11207   4   280410
5   197_$   9/11/2015   21:23:51    21:24:00    9349    11208   4   280440

希望这会有所帮助。