带有代码和日期索引的两个数据帧之间的元素划分
Element-wise division between two dataframes with tickers and Date index
我有两个数据帧 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()
returns False
.
我想计算这两个除法之间的逐元素除法,即,对于第一个元素,我想要 0.017664/0.005953
的值。
我在这里看到了 post:
所以我只是尝试 df1.div(df2)
其中 returns 所有 NaN
值,但将列数加倍 .
感谢@Rafa 的评论,我检查了列,但是
df1.columns
returns
MultiIndex([('Close', 'AAPL'),
('Close', 'AMD'),
('Close', 'BIDU'),
('Close', 'GOOGL'),
('Close', 'IXIC'),
('Close', 'MSFT'),
names=[None, 'ticker'])
所以我检查了索引。
我的
df1.index
returns
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 都是 multiindex 并且您需要二级 multiindex,因此唯一需要做的是:
df1.columns = df1.columns.get_level_values(1)
df2.columns = df2.columns.get_level_values(1)
万一它不起作用(出于任何原因),只需确保两个数据框具有相同的列列表:
df1.columns = df2.columns
然后进行除法
我有两个数据帧 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()
returns False
.
我想计算这两个除法之间的逐元素除法,即,对于第一个元素,我想要 0.017664/0.005953
的值。
我在这里看到了 post:
所以我只是尝试 df1.div(df2)
其中 returns 所有 NaN
值,但将列数加倍 .
感谢@Rafa 的评论,我检查了列,但是
df1.columns
returns
MultiIndex([('Close', 'AAPL'),
('Close', 'AMD'),
('Close', 'BIDU'),
('Close', 'GOOGL'),
('Close', 'IXIC'),
('Close', 'MSFT'),
names=[None, 'ticker'])
所以我检查了索引。
我的
df1.index
returns
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 都是 multiindex 并且您需要二级 multiindex,因此唯一需要做的是:
df1.columns = df1.columns.get_level_values(1)
df2.columns = df2.columns.get_level_values(1)
万一它不起作用(出于任何原因),只需确保两个数据框具有相同的列列表:
df1.columns = df2.columns
然后进行除法