首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas连接/合并/合并两个数据帧

Pandas连接/合并/合并两个数据帧
EN

Stack Overflow用户
提问于 2012-07-25 02:50:12
回答 2查看 34.6K关注 0票数 21

我在连接熊猫时遇到了问题,我正在努力找出问题出在哪里。假设我有一个dataframe x:

<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 1941 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00
Data columns:
close    1941  non-null values
high     1941  non-null values
low      1941  non-null values
open     1941  non-null values
dtypes: float64(4)

我是否可以通过一个简单的连接命令将它与索引上的y连接起来,其中y=x,除非colname有+2。

 <class 'pandas.core.frame.DataFrame'>
 DatetimeIndex: 1941 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00
 Data columns:
 close2    1941  non-null values
 high2     1941  non-null values
 low2      1941  non-null values
 open2     1941  non-null values
 dtypes: float64(4)

 y.join(x) or pandas.DataFrame.join(y,x):
 <class 'pandas.core.frame.DataFrame'>
 DatetimeIndex: 34879 entries, 2004-12-16 00:00:00 to 2012-07-12 00:00:00
 Data columns:
 close2    34879  non-null values
 high2     34879  non-null values
 low2      34879  non-null values
 open2     34879  non-null values
 close     34879  non-null values
 high      34879  non-null values
 low       34879  non-null values
 open      34879  non-null values
 dtypes: float64(8)

我预计期末考试会有1941个非数值。我也尝试过merge,但我也遇到了同样的问题。

我认为正确的答案是pandas.concat(x,y),但这也不是我想要的。

In [83]: pandas.concat([x,y]) 
Out[83]: <class 'pandas.core.frame.DataFrame'> 
DatetimeIndex: 3882 entries, 2004-10-19 00:00:00 to 2012-07-23 00:00:00 
Data columns: 
close2 3882 non-null values 
high2 3882 non-null values 
low2 3882 non-null values 
open2 3882 non-null values 
dtypes: float64(4) 

编辑:如果你在join方面有问题,请阅读下面Wes的答案。我有一个时间戳是重复的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-25 05:10:37

你的索引有重复的x.index.is_unique吗?如果是这样,就可以解释你所看到的行为:

In [16]: left
Out[16]: 
            a
2000-01-01  1
2000-01-01  1
2000-01-01  1
2000-01-02  2
2000-01-02  2
2000-01-02  2

In [17]: right
Out[17]: 
            b
2000-01-01  3
2000-01-01  3
2000-01-01  3
2000-01-02  4
2000-01-02  4
2000-01-02  4

In [18]: left.join(right)
Out[18]: 
            a  b
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-01  1  3
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
2000-01-02  2  4
票数 23
EN

Stack Overflow用户

发布于 2012-07-25 02:54:43

听起来可能你想要pandas.concatmergejoin连接,这意味着他们会给你一些基于这两个输入的笛卡尔乘积的东西,但听起来你只是想把它们粘贴到一个大表中。

编辑:你有没有尝试过使用axis=1的concat?它似乎做到了你所要求的:

>>> print x
          A         B         C
0  0.155614 -0.252148  0.861163
1  0.973517  1.156465 -0.458846
2  2.504356 -0.356371 -0.737842
3  0.012994  1.785123  0.161667
4  0.574578  0.123689  0.017598
>>> print y
         A2        B2        C2
0 -0.280993  1.278750 -0.704449
1  0.140282  1.955322 -0.953826
2  0.581997 -0.239829  2.227069
3 -0.876146 -1.955199 -0.155030
4 -0.518593 -2.630978  0.333264
>>> print pandas.concat([x, y], axis=1)
          A         B         C        A2        B2        C2
0  0.155614 -0.252148  0.861163 -0.280993  1.278750 -0.704449
1  0.973517  1.156465 -0.458846  0.140282  1.955322 -0.953826
2  2.504356 -0.356371 -0.737842  0.581997 -0.239829  2.227069
3  0.012994  1.785123  0.161667 -0.876146 -1.955199 -0.155030
4  0.574578  0.123689  0.017598 -0.518593 -2.630978  0.333264
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11637384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档