数据帧不合并,但使用python合并

2024-06-08 20:15:07 发布

您现在位置:Python中文网/ 问答频道 /正文

问题是当从查询中获取数据并使用

df1 = pd.DataFrame(test_data)
df2 = pd.DataFrame(original_data)
df = df1.merge(df2, how = 'outer', indicator=False,
                        left_on = query_uniq_col.replace(' ','').split(','),
                        right_on = query_uniq_col.replace(' ','').split(','))

理论上,df应该是df1和df2之间的合并,但事实证明df是df1和df2串联的结果。我已经尝试使用

for x in df2.columns:
            df1[x]=df1[x].astype(df2[x].dtypes.name)
            print(df1[x].dtypes)
            if str(df1[x].dtypes) == 'float64':
                print('yes')
                df1[x].round(decimals=8)
                df2[x].round(decimals=8)

结果没有改变。如果我使用df.to_csv()将这些df1和df2导出到csv,然后使用df.read_csv()将它们读回,现在合并是完美的,但问题是我不应该这样做。这是作弊,如果它影响其他任务,可能会导致一些失败

我想使用merge的目的是通过使用 df["difference"]= df["gtv_x"] - df["gtv_y"] 然后我会把唯一的区别写回数据库。 请帮忙

当前:

df1:
date        city vehicle_type gtv   number_of_bookings
2021-11-07  HCM Car          1000   200
2021-11-06  HN  Truck        2000   300
2021-11-05  LA  6w_truck     3000   400
2021-11-04  CM  mini_van     4000   500

df2:
date        city vehicle_type gtv   number_of_bookings
2021-11-07  HCM Car          1000   200
2021-11-06  HN  Truck        2000   300
2021-11-05  LA  6w_truck     3000   400
2021-11-04  CM  mini_van     9000   500

df:
date        city vehicle_type gtv_x   number_of_bookings_x gtv_y number_of_bookings_y
2021-11-07  HCM  Car          1000    200
2021-11-06  HN   Truck        2000    300
2021-11-05  LA   6w_truck     3000    400
2021-11-04  CM   mini_van     4000    500
2021-11-07  HCM  Car                                       1000    200
2021-11-06  HN   Truck                                     2000    300
2021-11-05  LA   6w_truck                                  3000    400
2021-11-04  CM   mini_van                                  9000    500

期望:

date        city vehicle_type gtv_x   number_of_bookings_x gtv_y number_of_bookings_y
2021-11-07  HCM  Car          1000    200                  1000  200
2021-11-06  HN   Truck        2000    300                  2000  300
2021-11-05  LA   6w_truck     3000    400                  3000  400
2021-11-04  CM   mini_van     4000    500                  9000  500

Tags: ofnumberdfcmcarladf1df2