首页 > 解决方案 > 合并熊猫数据框时得到错误的结果

问题描述

我有两个数据框,例如-

    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

标签: pythonpandas

解决方案


一般来说,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

使用 2 个数据框组合concat()

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

希望这可以帮助..


推荐阅读