gpt4 book ai didi

python - 连接两个具有 DateTime 格式的重复索引的数据帧

转载 作者:行者123 更新时间:2023-12-05 03:03:30 26 4
gpt4 key购买 nike

我正在尝试对包含重复索引的两个数据框使用 pandas concat。

当我尝试连接我的两个数据帧时出现以下错误

传递值的形状是 (12, 180054),索引表示 (12, 10000)。

为了更好地理解这个问题,我创建了两个数据框:

df1 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-02",'b':4}],
columns = ['a','b']).set_index('a')
df1.index = pd.to_datetime(df1.index)

看起来像:

            b
a
2018-01-01 2
2018-01-01 3
2018-01-02 4

df2 = pd.DataFrame([{'a':"2018-01-01",'c':5},{'a':"2018-01-02",'c':6}],columns = ['a','c']).set_index('a')
df2.index = pd.to_datetime(df2.index)

看起来像:

            c
a
2018-01-01 5
2018-01-02 6

这与我原来的 Dataframe 有相似之处。索引重复且采用日期时间格式。

但是 concat(轴 = 1)可以很好地创建以下数据框

            b   c
a
2018-01-01 2 5
2018-01-01 3 5
2018-01-02 4 6

(这是我所期望的)

但是如果我使用:

df3 = pd.DataFrame([{'a':"2018-01-01",'b':2},{'a':"2018-01-01",'b':3},{'a':"2018-01-03",'b':4}],
columns = ['a','b']).set_index('a')
df3.index = pd.to_datetime(df3.index)

看起来像:

            b
a
2018-01-01 2
2018-01-01 3
2018-01-03 4

它返回的不是 df1,而是

Shape of passed values is (2, 6), indices imply (2, 4)

两者唯一的区别是df1的最终日期是2018-01-02,df3的是2018-01-03。

逻辑上(至少对我而言)它应该返回以下内容:

            b   c
a
2018-01-01 2 5
2018-01-01 3 5
2018-01-02 Nan 6
2018-01-03 4 Nan

我不明白它如何能够正确地做一个而不是另一个,因为如果它不能处理重复的索引,它应该在两个上都同样失败。

Pandas concat: ValueError: Shape of passed values is blah, indices imply blah2基本上是同一个问题,但是所有的回答都说问题是重复的索引,但这不是唯一的原因,因为 concat 实际上确实适用于重复的索引。

我想真正了解出了什么问题以及解决问题的方法。

非常感谢

最佳答案

你需要做一个外连接:df3.join(df2, how='outer')

             b    c
a
2018-01-01 2.0 5.0
2018-01-01 3.0 5.0
2018-01-02 NaN 6.0
2018-01-03 4.0 NaN

关于python - 连接两个具有 DateTime 格式的重复索引的数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53853826/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com