我有每日的股票数据,包括符号,日期,关闭多个符号。我试图完成以下任务:
1.查找前向滚动最小关闭值
1.窗口大小= 5日历天(不是5行)。
1.按符号分组
数据
Date, Symbol, Close
2021-01-01, AAPL, 10
2021-01-02, AAPL, 12
2021-01-03, AAPL, 3
2021-01-04, AAPL, 20
2021-01-05, AAPL, 15
2021-01-01, MSFT, 12
2021-01-02, MSFT, 20
2021-01-03, MSFT, 12
2021-01-04, MSFT, 20
2021-01-05, MSFT, 20
字符串
当前尝试:
df.assign(min_roll=df.iloc[::-1].groupby(df['Symbol']).rolling(on='Date',window='5D',min_periods=1)['Close'].min().sort_index(level=1).reset_index(0,drop=True))
型
按日期降序排序,以便按日期前向滚动df.iloc[::-1]
当应用rolling(on='Date'
和window='5D'
时,我得到一个错误:
ValueError: cannot reindex on an axis with duplicate labels
型
如果没有时间间隔组件,代码将按预期工作5行(不是日历天)
df.assign(min_roll=df.iloc[::-1].groupby(df['Symbol']).rolling(5,min_periods=1)['Close'].min().sort_index(level=1).reset_index(0,drop=True))
型
我做错了什么?
3条答案
按热度按时间m3eecexj1#
你的问题是,你试图指定一个窗口,它通过索引,作为
5D
,没有一个日期时间索引。要解决此问题,请使用此:
字符串
我在应用以下代码时得到了这个:
型
结果如下:
型
所以作为一个总结:你的问题是DF的索引,如果我的语义对你不起作用,也许我的语法会;)
rryofs0p2#
可以使用
DataFrame.merge
代替assign
:字符串
8aqjt8rx3#
下面的工作对我来说。变量是列包含股票名称。天是列包含日期。价值是股票价格。
字符串