首页 > 解决方案 > Python:数据框在索引规则上添加一列

问题描述

得到一个如下的数据框,它的索引是 [date,assetName]

如何添加 10 天内开盘价的新列?

日期索引列的数据类型是

时间戳('2007-02-01 00:00:00+0000', tz='UTC')

from datetime import datetime
import pandas as pd
datetime_object = datetime.strptime('Feb 1 2007', '%b %d %Y')

market_df   = pd.DataFrame({'date': [
                                    datetime.strptime('Feb 1 2007', '%b %d %Y')
                                    ,datetime.strptime('Feb 1 2007', '%b %d %Y')
                                    ,datetime.strptime('Feb 1 2007', '%b %d %Y') 
                                    ,datetime.strptime('Feb 11 2007', '%b %d %Y')
                                    ,datetime.strptime('Feb 11 2007', '%b %d %Y')
                                    ,datetime.strptime('Feb 11 2007', '%b %d %Y') 
                                    ],
                            'assetName': ['AAPL', 'GOOGL', 'AMZN','AAPL', 'GOOGL', 'AMZN'],
                            'open': [20, 30.9, 40, 22.3, 35, 45],
                            'close': [20.5, 30.6, 40.5,22.3,35,45],
                           })
market_df = market_df.set_index(['date','assetName'])  

如何使用新列“price_in_10_days”获取此数据框

date    assetName   open    close   price_in_10_days
2007-02-01  AAPL    20.0    20.5    22.3
2007-02-01  GOOGL   30.9    30.6    35.0
2007-02-01  AMZN    40.0    40.5    45.0
2007-02-11  AAPL    22.3    22.3    NaN
2007-02-11  GOOGL   35.0    35.0    NaN
2007-02-11  AMZN    45.0    45.0    NaN

数据框示例

标签: pythonpandasdataframe

解决方案


我相信您需要按天创建DatetimeIndexunstack然后shift10天创建stack

market_df['price_in_10_days']  = market_df['open'].unstack().shift(-1, freq='10D').stack()
print (market_df)

                      open  close  price_in_10_days
date       assetName                               
2007-02-01 AAPL       20.0   20.5              22.3
           GOOGL      30.9   30.6              35.0
           AMZN       40.0   40.5              45.0
2007-02-11 AAPL       22.3   22.3               NaN
           GOOGL      35.0   35.0               NaN
           AMZN       45.0   45.0               NaN

推荐阅读