【发布时间】:2021-07-10 17:31:47
【问题描述】:
问题是从查询中获取数据并使用like
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串联的结果。我已经尝试通过使用来匹配 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() 将它们读回,那么现在合并是完美的,但问题是我不应该这样做。这是作弊,如果影响其他气流任务,可能会导致一些故障。
我想使用合并的目的是通过使用找到 2 个数据帧之间的差异
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
【问题讨论】:
-
provide minimal-reproducible-example...给出 2 个示例数据框,以便任何人都知道您的数据是什么样子并对其进行一些测试
-
@AnuragDabas 是的,我只是将其附加到问题中,谢谢提醒
-
什么是
query_uniq_col?因为df = df1.merge(df2, how='outer', on=['date', 'city', 'vehicle_type'])有效 -
@HenryEcker 它是关于拆分文本以获取唯一列的名称,即使我像
on=['date', 'city', 'vehicle_type']那样使用,它仍然没有达到预期
标签: python pandas dataframe data-science data-processing