如何匹配两个数据帧中的相应数据?

时间:2019-10-15 00:58:58

标签: pandas dataframe

我有两个数据框。 dataframe_a

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  10        | america       |        12 | 2000-1-1
  11        | america       |        13 | 2000-1-2
  21        | china         |        14 | 2000-1-3

dataframe_b

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  1         | china         |        14 | 2000-1-3
  2         | america       |        13 | 2000-1-2
  3         | america       |        12 | 2000-1-1

我需要将这些数据帧组合到相应的location_zonetest_houranalysis_date上,并添加data列。最终结果应为:

    data    | location_zone | test_hour |     analysis_date
------------+---------------+-----------+------------------------
  13        | america       |        12 | 2000-1-1
  13        | america       |        13 | 2000-1-2
  22        | china         |        14 | 2000-1-3

2 个答案:

答案 0 :(得分:1)

您可以执行concat + groupby

df = pd.concat([dataframe_a, dataframe_b]).groupby(['location_zone','test_hour','analysis_date'], as_index=False)['data'].sum()
print(df)

输出

  location_zone  test_hour analysis_date  data
0       america         12      2000-1-1    13
1       america         13      2000-1-2    13
2         china         14      2000-1-3    22

答案 1 :(得分:0)

由于两个df的列名称相同,因此您可以将一个data列重命名为不同的名称,然后让merge处理其余列。接下来,调用eval并在原始列上切片

df_final = (df_a.merge(df_b.rename(columns={'data': 'data_b'}))
                .eval('data=data + data_b')[df_a.columns])

Out[20]:
   data location_zone  test_hour analysis_date
0    13       america         12      2000-1-1
1    13       america         13      2000-1-2
2    22         china         14      2000-1-3