简体   繁体   中英

Combining two dataframes using shared column values as key in pandas

I am trying to add a row from one data frame to another on shared column values (in this case day of year - DOY).

I have tried merge, concat, and join functions, but not getting the results desired.

I have tried all combinations of these given the help documentation https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html , but to no avail...

DF1 =

    DOY Model           Global   Diffuse    month   season
0   1   Standard Mean   0.2968  0.893733    1   Winter
1   2   Standard Mean   0.3692  0.806867    1   Winter
2   3   Standard Mean   0.3608  0.818200    1   Winter
3   4   Standard Mean   0.2725  0.914178    1   Winter
4   5   Standard Mean   0.2323  0.943211    1   Winter
5   6   Standard Mean   0.2510  0.929867    1   Winter
6   7   Standard Mean   0.2264  0.946467    1   Winter
7   8   Standard Mean   0.2294  0.944811    1   Winter
8   9   Standard Mean   0.2731  0.913700    1   Winter
9   10  Standard Mean   0.2336  0.942478    1   Winter
10  11  Standard Mean   0.3299  0.857322    1   Winter
11  12  Standard Mean   0.2996  0.891222    1   Winter
12  13  Standard Mean   0.2470  0.932567    1   Winter
13  14  Standard Mean   0.2567  0.925911    1   Winter
14  15  Standard Mean   0.3993  0.764089    1   Winter
15  16  Standard Mean   0.3009  0.890289    1   Winter
16  17  Standard Mean   0.3578  0.822156    1   Winter
17  18  Standard Mean   0.3513  0.830600    1   Winter
18  19  Standard Mean   0.3143  0.875544    1   Winter
19  20  Standard Mean   0.4353  0.708689    1   Winter
20  21  Standard Mean   0.3430  0.841233    1   Winter
21  22  Standard Mean   0.3390  0.846267    1   Winter
22  23  Standard Mean   0.4578  0.672033    1   Winter
23  24  Standard Mean   0.3411  0.843622    1   Winter
24  25  Standard Mean   0.3694  0.806567    1   Winter
25  26  Standard Mean   0.4146  0.741089    1   Winter
26  27  Standard Mean   0.3815  0.789789    1   Winter
27  28  Standard Mean   0.2977  0.892911    1   Winter
28  29  Standard Mean   0.2377  0.940111    1   Winter
29  30  Standard Mean   0.3342  0.852067    1   Winter

...

DF2 =

      DOY             Model Global  Diffuse month   season
0   1   Orgill_Hollands 0.2968  0.9261  1   Winter
1   1   Reindl_Et_Al    0.2968  0.9464  1   Winter
2   1   Boland_Et_Al    0.2968  0.9099  1   Winter
3   1   Hawlader        0.2968  0.8212  1   Winter
4   1   Miguel_Et_Al    0.2968  0.9336  1   Winter
5   1   Karatasou_Et_Al 0.2968  0.8109  1   Winter
6   1   Erbs_Et_al      0.2968  0.9506  1   Winter
7   1   Chandra         0.2968  0.9139  1   Winter
8   1   Oliveira_Et_Al  0.2968  0.9024  1   Winter
9   1   Soares_Et_Al    0.2968  0.8547  1   Winter
10  2   Orgill_Hollands 0.3692  0.8777  1   Winter
11  2   Reindl_Et_Al    0.3692  0.8334  1   Winter
12  2   Boland_Et_Al    0.3692  0.8499  1   Winter
13  2   Hawlader        0.3692  0.7343  1   Winter
14  2   Miguel_Et_Al    0.3692  0.8507  1   Winter
15  2   Karatasou_Et_Al 0.3692  0.7269  1   Winter
16  2   Erbs_Et_al      0.3692  0.8818  1   Winter
17  2   Chandra         0.3692  0.8362  1   Winter
18  2   Oliveira_Et_Al  0.3692  0.7970  1   Winter
19  2   Soares_Et_Al    0.3692  0.7516  1   Winter
20  3   Orgill_Hollands 0.3608  0.8931  1   Winter
21  3   Reindl_Et_Al    0.3608  0.8475  1   Winter
22  3   Boland_Et_Al    0.3608  0.8583  1   Winter
23  3   Hawlader        0.3608  0.7446  1   Winter
24  3   Miguel_Et_Al    0.3608  0.8621  1   Winter
25  3   Karatasou_Et_Al 0.3608  0.7371  1   Winter
26  3   Erbs_Et_al      0.3608  0.8919  1   Winter
27  3   Chandra         0.3608  0.8469  1   Winter
28  3   Oliveira_Et_Al  0.3608  0.8106  1   Winter
29  3   Soares_Et_Al    0.3608  0.7648  1   Winter

...

I need the following::

    DOY Model   Global  Diffuse month   season
0   1   Orgill_Hollands 0.2968  0.9261  1   Winter
1   1   Reindl_Et_Al    0.2968  0.9464  1   Winter
2   1   Boland_Et_Al    0.2968  0.9099  1   Winter
3   1   Hawlader        0.2968  0.8212  1   Winter
4   1   Miguel_Et_Al    0.2968  0.9336  1   Winter
5   1   Karatasou_Et_Al 0.2968  0.8109  1   Winter
6   1   Erbs_Et_al      0.2968  0.9506  1   Winter
7   1   Chandra         0.2968  0.9139  1   Winter
8   1   Oliveira_Et_Al  0.2968  0.9024  1   Winter
9   1   Soares_Et_Al    0.2968  0.8547  1   Winter
10  1   Standard Mean   0.2968  0.8937  1   Winter
11  2   Orgill_Hollands 0.3692  0.8777  1   Winter
12  2   Reindl_Et_Al    0.3692  0.8334  1   Winter
13  2   Boland_Et_Al    0.3692  0.8499  1   Winter
14  2   Hawlader        0.3692  0.7343  1   Winter
15  2   Miguel_Et_Al    0.3692  0.8507  1   Winter
16  2   Karatasou_Et_Al 0.3692  0.7269  1   Winter
17  2   Erbs_Et_al      0.3692  0.8818  1   Winter
18  2   Chandra         0.3692  0.8362  1   Winter
19  2   Oliveira_Et_Al  0.3692  0.7970  1   Winter
20  2   Soares_Et_Al    0.3692  0.7516  1   Winter
21  2   Standard Mean   0.3692  0.8068  1   Winter
22  3   Orgill_Hollands 0.3608  0.8931  1   Winter
23  3   Reindl_Et_Al    0.3608  0.8475  1   Winter
24  3   Boland_Et_Al    0.3608  0.8583  1   Winter
25  3   Hawlader        0.3608  0.7446  1   Winter
26  3   Miguel_Et_Al    0.3608  0.8621  1   Winter
27  3   Karatasou_Et_Al 0.3608  0.7371  1   Winter
28  3   Erbs_Et_al      0.3608  0.8919  1   Winter
29  3   Chandra         0.3608  0.8469  1   Winter
30  3   Oliveira_Et_Al  0.3608  0.8106  1   Winter
31  3   Soares_Et_Al    0.3608  0.7648  1   Winter
32  3   Standard Mean   0.3608  0.8182  1   Winter

我相信,如果将第二个数据帧连接到第一个数据帧,然后对DOY进行排序并重置索引,您将获得理想的结果。

pd.concat([DF2, DF1]).sort_values('DOY').reset_index(drop=True)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM