【发布时间】:2018-02-02 14:41:28
【问题描述】:
我有 2 个 df,我想根据 2 个键合并它们 - ID 和日期: 我关注的只是整个df的一小部分
df_pw6
ID date pw10_0 pw50_0 pw90_0
0 153 2018-01-08 27.88590 43.2872 58.2024
0 2 2018-01-05 11.03610 21.4879 31.6997
0 506 2018-01-08 6.98468 25.3899 45.9486
df_ex
date ID measure f188 f187 f186 f185
0 2017-07-03 501 NaN 1 0.5 7 4.0
1 2017-07-03 502 NaN 0 2.5 5 3.0
2 2018-01-08 506 NaN 5 9.0 9 1.2
如您所见,只有第三行有匹配项。 当我输入时:
#check date
df_ex.iloc[2,0]== df_pw6.iloc[1,1]
True
#check ID
df_ex.iloc[2,1] == df_pw6.iloc[2,0]
True
现在我尝试合并它们:
df19 = pd.merge(df_pw6,df_ex,on=['date','ID'])
我得到一个空的df
当我尝试时:
df19 = pd.merge(df_pw6,df_ex,how ='left',on=['date','ID'])
我明白了:
ID date pw10_0 pw50_0 pw90_0 measure f188 f187 f186 f185
0 153 2018-01-08 00:00:00 27.88590 43.2872 58.2024 NaN NaN NaN NaN NaN
1 2 2018-01-05 00:00:00 11.03610 21.4879 31.6997 NaN NaN NaN NaN NaN
2 506 2018-01-08 00:00:00 6.98468 25.3899 45.9486 NaN NaN NaN NaN NaN
我想要的结果应该是:
> ID date pw10_0 pw50_0 pw90_0 measure f188 f187 f186 f185
>
> 0 506 2018-01-08 00:00:00 6.98468 25.3899 45.9486 NaN 5 9.0 9 1.2
【问题讨论】:
-
left连接工作正常,id 506 的日期值在 df_pw6 中为 2018-01-08,而在 df_ex 中为 2018-01-05,因此这两个 id 没有共同的行 -
@GauravTaneja 你的意思是
inner合并。尽管left合并也按预期工作。 OP,在此示例中,您的两个 DataFrame 有 no 匹配键。 -
如上述评论所建议的,您在示例中没有匹配项。您能否编辑您的问题,以便我们知道您真正的问题是什么?
-
我编辑了我的问题,现在有一个匹配项(最后一行),谢谢
-
我实际上无法复制您的结果,即使用
df19 = pd.merge(df_pw6,df_ex,on=['date','ID'])得到一个空的df