微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有代码和日期索引的两个数据帧之间的元素划分

如何解决带有代码和日期索引的两个数据帧之间的元素划分

我有两个以 Date 为索引的数据框,
df1 如下:

ticker          AAPL       AMD      BIDU     GOOGL      IXIC      MSFT   
Date                                                                     
2011-06-29  0.017664  0.024379  0.029592  0.016947  0.010632  0.014888   
2011-07-14  0.011054  0.023751  0.020682  0.018319  0.011720  0.008974   
2011-07-28  0.015654  0.061570  0.027052  0.040214  0.013136  0.018023   
2011-08-11  0.033560  0.051619  0.050874  0.033624  0.039744  0.033243   
2011-08-25  0.023524  0.037700  0.039888  0.026866  0.025491  0.017059   
...              ...       ...       ...       ...       ...       ...   
2021-03-25  0.019135  0.022755  0.058591  0.013458  0.013935  0.014096   
2021-04-09  0.011087  0.015793  0.027506  0.014799  0.008590  0.014066   
2021-04-23  0.015193  0.035461  0.021222  0.011206  0.010541  0.010495   
2021-05-07  0.013870  0.019531  0.009501  0.014049  0.008334  0.012325   
2021-05-21  0.017664  0.022013  0.028316  0.017536  0.016039  0.016377   

df2 如下:

ticker               AAPL       AMD      BIDU     GOOGL      IXIC      MSFT   
Date                                                                          
2011-06-29       0.005953  0.010331  0.008564  0.010089  0.000288  0.004542   
2011-07-14       0.006609  0.000628  0.008910  0.001372  0.001088  0.005914   
2011-07-28       0.004600  0.037819  0.006369  0.021895  0.001416  0.009049   
2011-08-11       0.017906  0.009951  0.023822  0.006591  0.026608  0.015220   
2011-08-25       0.010036  0.013919  0.010986  0.006758  0.014252  0.016183   
...                   ...       ...       ...       ...       ...       ...   
2021-03-25       0.010546  0.017421  0.015649  0.010738  0.009917  0.005328   
2021-04-09       0.008049  0.006963  0.031085  0.001341  0.005345  0.000031   
2021-04-23       0.004107  0.019669  0.006285  0.003594  0.001951  0.003571   
2021-05-07       0.001323  0.015930  0.011720  0.002843  0.002206  0.001831   
2021-05-21       0.003793  0.002482  0.018815  0.003487  0.007704  0.004052   

我检查了两个数据框的行数和列数是否相同,并且没有 NaN。即,对于两个数据帧,df.isnull().values.any() 返回 False

我想计算这两个除法之间的元素除法,即,对于第一个元素,我想要 0.017664/0.005953 的值。
在这里看到过这个帖子:What does .div do in Pandas (Python)
所以我只是尝试 df1.div(df2) 返回所有 NaN 值,但列数加倍

感谢@Rafa 的评论,我检查了列,但是

df1.columns

返回

MultiIndex([('Close','AAPL'),('Close','AMD'),'BIDU'),'GOOGL'),'IXIC'),'MSFT'),names=[None,'ticker'])

所以我检查了索引。

我的

df1.index

返回

Index(['2011-06-29','2011-07-14','2011-07-28','2011-08-11','2011-08-25','2011-09-09','2011-09-23','2011-10-07','2011-10-21','2011-11-04',...
       '2021-01-12','2021-01-27','2021-02-10','2021-02-25','2021-03-11','2021-03-25','2021-04-09','2021-04-23','2021-05-07','2021-05-21'],dtype='object',name='Date',length=250)

但如果尝试过

df1.index.get_level_values(1)

它说

IndexError: Too many levels: Index has only 1 level,not 2

现在我对我的 df1 是否是多索引数据帧感到困惑?

我应该如何进行?感谢您的帮助。

解决方法

您遇到的问题是列不同 - 这就是列数翻倍但索引保持不变的原因。由于 df1 和 df2 都是多索引,您需要二级多索引,唯一需要做的是:

df1.columns = df1.columns.get_level_values(1)
df2.columns = df2.columns.get_level_values(1)

如果它不起作用(出于任何原因),只需确保两个数据框具有相同的列列表:

df1.columns = df2.columns

然后进行分割。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。