问题描述
我有两个以 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
然后进行分割。