我有两个df,我想以一种不同寻常的方式结合起来。
有问题的df:
df1:
Index colA
2012-01-02 1
2012-01-05 2
2012-01-10 3
2012-01-10 4
然后是df2:
Index colB
2012-01-01 6
2012-01-05 7
2012-01-08 8
2012-01-10 9
输出:
Index colA colB
2012-01-01 NaN 6
2012-01-02 1 NaN
2012-01-05 2 7
2012-01-08 NaN 8
2012-01-10 3 9
2012-01-10 4 NaN
如果df之间没有匹配的日期,很高兴有NaN输出。
如果有匹配的日期,我想返回两列。
可能存在单个日期具有例如的实例。df1中的20行和df2中的15行..它将匹配前15个(不关心排序),然后返回dn2中最后5行的NaN。
当我pd.merge()和其他人一起尝试这样做时,我不能这样做,因为日期对于索引来说显然不是唯一的。
有任何建议如何获得预期的行为?
您可能需要创建一个帮助键 cumcount
df1=df1.assign(key=df1.groupby('Index').cumcount())
df2=df2.assign(key=df2.groupby('Index').cumcount())
fdf=df1.merge(df2,how='outer').drop('key',1).sort_values('Index')
fdf
Out[104]:
Index colA colB
4 2012-01-01 NaN 6.0
0 2012-01-02 1.0 NaN
1 2012-01-05 2.0 7.0
5 2012-01-08 NaN 8.0
2 2012-01-10 3.0 9.0
3 2012-01-10 4.0 NaN
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。