开发者社区> 问答> 正文

pandas- 在非唯一日期合并两个df(外部联接)

我有两个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()和其他人一起尝试这样做时,我不能这样做,因为日期对于索引来说显然不是唯一的。

有任何建议如何获得预期的行为?

展开
收起
一码平川MACHEL 2019-02-28 13:45:52 4395 0
1 条回答
写回答
取消 提交回答
  • 您可能需要创建一个帮助键 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

    2019-07-17 23:29:43
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
中文:即学即用的Pandas入门与时间序列分析 立即下载
即学即用的Pandas入门与时间序列分析 立即下载
低代码开发师(初级)实战教程 立即下载