我在Pandas中有两个数据帧,我想连接在一起(我认为合并(,当我这样做时,生成的DataFrame具有新数据帧右侧的所有NaN。这是一个简化的原理图:
DF_Left
station_name trips date_zip
0 Mountain View 100 95113 2013-08-29
1 San Francisco 190 95113 2012-04-12
2 San Jose 109 94107 2013-09-01
DF_Right
max_temperature wind_speed date_zip
0 79 2 95113 2013-08-29
1 67 3 95113 2012-04-12
2 64 1 94107 2013-09-01
左侧大约有 40K 行,右侧有 1500 行。我想做的是合并两者,以便根据date_zip列将DF_Right添加到DF_Left中。所以我真正想要的是
DF_Correct
station_name trips date_zip max_temperature wind_speed
0 Mountain View 100 95113 2013-08-29 79 2
1 San Francisco 190 95113 2012-04-12 67 3
2 San Jose 109 94107 2013-09-01 64 1
当我这样做时
DF_Correct = pd.merge(DF_Left, DF_Right, left_on=['date_zip'], right_on = ['date_zip' ], how='left')
我得到了我想要的,除了所有的天气列现在都是 NaN。我不确定这里的术语,所以我认为合并是我想要的,但我不确定我的数据发生了什么。
请检查数据以确保数据/类型正确。在下面找到代码,尝试使用您的示例。测试运行良好
import pandas as pd
df1 = pd.DataFrame({'station_name': ['Mountain View','San Francisco','San Jose','San Jose'],
'trips': [100,190,109,110],
'date_zip': ['95113 2013-08-29','95113 2012-04-12','94107 2013-09-01','94107 2013-09-02']})
df2 = pd.DataFrame({'wind_speed': [2,3,1],
'max_temperature': [79,67,64],
'date_zip': ['95113 2013-08-29','95113 2012-04-12','94107 2013-09-01']})
DF_Correct = pd.merge(df1, df2, on='date_zip', how='left')
到目前为止,我从这个问题中了解到,下面的代码应该给出所需的答案。
DF_Correct = pd.merge(DF_Right, DF_Left , how='left', on='date_zip')