合并列中具有相同值的 2 个数据框

joa*_*asa 4 python merge dataframe pandas

我有 2 个数据框。一种是这种形式:

df1:
     date      revenue
0  2016-11-17   385.943800
1  2016-11-18  1074.160340
2  2016-11-19  2980.857860
3  2016-11-20  1919.723960
4  2016-11-21   884.279340
5  2016-11-22   869.071070
6  2016-11-23   760.289260
7  2016-11-24  2481.689270
8  2016-11-25  2745.990070
9  2016-11-26  2273.413250
10 2016-11-27  2630.414900
Run Code Online (Sandbox Code Playgroud)

另一种是这种形式:

df2:

      CET    MaxTemp  MeanTemp MinTemp  MaxHumidity  MeanHumidity  MinHumidity
0  2016-11-17   11      9        7            100           85             63
1  2016-11-18   9       6        3             93           83             66
2  2016-11-19   8       6        4             93           87             76
3  2016-11-20   10      7        4             93           84             81
4  2016-11-21   14     10        7            100           89             77
5  2016-11-22   13     10        7             93           79             63
6  2016-11-23   11      8        5            100           91             82
7  2016-11-24   9       7        4             93           80             66
8  2016-11-25   7       4        1             87           74             57
9  2016-11-26   7       3       -1            100           88             61
10 2016-11-27  10       7        4            100           81             66   
Run Code Online (Sandbox Code Playgroud)

两个数据帧都有更多的行,并且每天的行数都在增加。

我想以某种方式组合这两个数据框,每次我们在df1['date']和 中看到相同的日期时df2['CET'],我们都会向 df2 添加一个额外的列,该列将具有该日期的收入值。所以我想创建这个:

df2:

      CET    MaxTemp  MeanTemp MinTemp  MaxHumidity  MeanHumidity  MinHumidity  revenue
0  2016-11-17   11      9        7            100           85             63   385.943800
1  2016-11-18   9       6        3             93           83             66  1074.160340
2  2016-11-19   8       6        4             93           87             76  2980.857860
3  2016-11-20   10      7        4             93           84             81  1919.723960
4  2016-11-21   14     10        7            100           89             77   884.279340
5  2016-11-22   13     10        7             93           79             63   869.071070
6  2016-11-23   11      8        5            100           91             82   760.289260
7  2016-11-24   9       7        4             93           80             66  2481.689270
8  2016-11-25   7       4        1             87           74             57  2745.990070
9  2016-11-26   7       3       -1            100           88             61  2273.413250
10 2016-11-27  10       7        4            100           81             66  2630.414900
Run Code Online (Sandbox Code Playgroud)

有人可以帮我怎么做吗?

jez*_*ael 5

我认为你可以使用map

df2['revenue'] = df2.CET.map(df1.set_index('date')['revenue'])
Run Code Online (Sandbox Code Playgroud)

您也可以转换Seriesdict,然后在 large 中速度会更快一些df

df2['revenue'] = df2.CET.map(df1.set_index('date')['revenue'].to_dict())

print (df2)
           CET  MaxTemp  MeanTemp  MinTemp  MaxHumidity  MeanHumidity  \
0   2016-11-17       11         9        7          100            85   
1   2016-11-18        9         6        3           93            83   
2   2016-11-19        8         6        4           93            87   
3   2016-11-20       10         7        4           93            84   
4   2016-11-21       14        10        7          100            89   
5   2016-11-22       13        10        7           93            79   
6   2016-11-23       11         8        5          100            91   
7   2016-11-24        9         7        4           93            80   
8   2016-11-25        7         4        1           87            74   
9   2016-11-26        7         3       -1          100            88   
10  2016-11-27       10         7        4          100            81   

    MinHumidity     revenue  
0            63   385.94380  
1            66  1074.16034  
2            76  2980.85786  
3            81  1919.72396  
4            77   884.27934  
5            63   869.07107  
6            82   760.28926  
7            66  2481.68927  
8            57  2745.99007  
9            61  2273.41325  
10           66  2630.41490  
Run Code Online (Sandbox Code Playgroud)

如果所有输出值都有NAN问题,则不同dtypes的列CETdate

print (df1.date.dtypes)
object
print (df2.CET.dtype)
datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

解决方案是转换stringto_datetime

df1.date = pd.to_datetime(df1.date)
Run Code Online (Sandbox Code Playgroud)