Python 如何在不复制行的情况下合并/连接两个数据帧,并将具有相同参数的数据帧保留在同一行中?

Python 如何在不复制行的情况下合并/连接两个数据帧,并将具有相同参数的数据帧保留在同一行中?,python,pandas,Python,Pandas,我将连接/合并两个数据帧,如下所示: ID1 = [2002070, 2002070, 2002740,2002740,2003010] ID2 = [2002070, 200800, 200800,2002740,2002740] Value1 = [4.5, 4.2, 3.7, 4.8, 4.4] Value2 = [7.2, 6.4, 10, 2.3, 1.5] date1 = ['2008-05-14', '2005-12-07','2008-10-27', '2009-04-20',

我将连接/合并两个数据帧,如下所示:

ID1 = [2002070, 2002070, 2002740,2002740,2003010]
ID2 = [2002070, 200800, 200800,2002740,2002740]
Value1 = [4.5, 4.2, 3.7, 4.8, 4.4]
Value2 = [7.2, 6.4, 10, 2.3, 1.5]
date1 = ['2008-05-14', '2005-12-07','2008-10-27', '2009-04-20', '2012-03-01']
date2 = ['2005-12-07','2003-10-10', '2004-05-14', '2011-06-03', '2015-07-05']
date1=pd.to_datetime(date1)
date2=pd.to_datetime(date2)
df1=pd.DataFrame({'ID': ID1, 'Value1': Value1, 'Date1':date1}).sort_values('Date1')
df2=pd.DataFrame({'ID': ID2, 'Value2': Value2, 'Date2':date2}).sort_values('Date2')
ok = df1.merge(df2,on='ID', how='outer', sort=True)
我得到了这个新的df,当数据在一个df中丢失时,数据会被复制

          ID  Value1    Date1   Value2  Date2
    0   200800  NaN     NaT     6.4 2003-10-10
    1   200800  NaN     Na      10  2004-05-14
    2   2002070 4.2 2005-12-07  7.2 2005-12-07
    3   2002070 4.5 2008-05-14  7.2 2005-12-07
    4   2002740 3.7 2008-10-27  2.3 2011-06-03
    5   2002740 3.7 2008-10-27  1.5 2015-07-05
    6   2002740 4.8 2009-04-20  2.3 2011-06-03
    7   2002740 4.8 2009-04-20  1.5 2015-07-05
    8   2003010 4.4 2012-03-01  NaN    NaT
但我希望得到这样的结果,即只有具有相同ID和日期的数据位于同一行上,其他数据将替换为NaN或NaT,而不是重复

         ID  Value Date1       Value2   Date2
    0   200800  NaN   NaT       6.4 2003-10-10
    1   200800  NaN   NaT       10  2004-05-14
    2   2002070 4.2 2005-12-07  7.2 2005-12-07   <---on the same row
    3   2002070 4.5 2008-05-14  NaN    NaT       <---not duplicated
    4   2002740 3.7 2008-10-27  NaN    NaT       
    5   2002740 NaN    NaT      2.3 2011-06-03
    6   2002740 NaN    NaT      1.5 2015-07-05
    7   2002740 4.8 2009-04-20  NaN    NaT
    8   2003010 4.4 2012-03-01  NaN    NaT
ID值Date1值Date2
200800南澳大利亚6.4 2003-10-10
1200800南澳大利亚州10 2004-05-14
2 2002070 4.2 2005-12-07 7.2 2005-12-07我相信您需要在左右两侧的两列中:

ok = df1.merge(df2, left_on=['ID','Date1'],right_on=['ID','Date2'], how='outer', sort=True)
print (ok)
        ID  Value1      Date1  Value2      Date2
0   200800     NaN        NaT     6.4 2003-10-10
1   200800     NaN        NaT    10.0 2004-05-14
2  2002070     4.2 2005-12-07     7.2 2005-12-07
3  2002070     4.5 2008-05-14     NaN        NaT
4  2002740     3.7 2008-10-27     NaN        NaT
5  2002740     4.8 2009-04-20     NaN        NaT
6  2002740     NaN        NaT     2.3 2011-06-03
7  2002740     NaN        NaT     1.5 2015-07-05
8  2003010     4.4 2012-03-01     NaN        NaT

为什么
8,9
行重复?因为Date2.iloc[8]与Date2.iloc[9]不同。谢谢你的回答,我只是在寻找这种类型的代码!嗯,那么
5,6
行是相同的
8,9
行?不明白我看到了错误!!我将使用正确的表格进行编辑。对不起,弄错了