python - 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
解决方案
我相信您需要按天创建DatetimeIndex
,unstack
然后shift
按10
天创建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
推荐阅读
- c# - 需要帮助将多个复选框列表中的数据插入数据库
- openlayers - 未触发 OpenLayer 翻译事件
- mysql - mysql 在 cast() 时按大小写
- javascript - HTML 文件未从 javascript 文件中提取信息
- python - 如何绘制 x 和 y 轴?
- c - 如何使用 fgets() 函数使其每行仅读取 12 个字符?
- javascript - 使用 Cryptojs 时数组长度无效
- java - 当 if 语句中必须满足所有 3 个条件时如何返回某些内容
- selenium - selnium chromedriver.exe 可执行文件需要在 PATH [重复]
- c++ - 如何将有符号整数转换为无符号整数