Pandas中shift(1)函数取值方向的技术咨询
关于Pandas shift(1)的清晰解释
嘿,这个问题其实很容易搞混,我给你掰扯清楚!首先直接给结论:Pandas里的shift(1)返回的是当前单元格的上一行(前一个时间点)内容,完全不是下一个单元格的内容。
拿你举的例子来说:当处理2000年2月2日的数据时,调用.shift(1)会返回2000年2月1日的数据,而不是2月3日的。
用实际例子理解更直观
假设你有一个包含日期和价格的DataFrame:
import pandas as pd data = { '日期': ['2000-02-01', '2000-02-02', '2000-02-03'], '价格': [100, 105, 110] } df = pd.DataFrame(data) df['日期'] = pd.to_datetime(df['日期'])
当你对价格列调用shift(1)后:
df['价格_shift1'] = df['价格'].shift(1)
得到的结果是:
| 日期 | 价格 | 价格_shift1 |
|---|---|---|
| 2000-02-01 | 100 | NaN |
| 2000-02-02 | 105 | 100 |
| 2000-02-03 | 110 | 105 |
你看,2000-02-02对应的价格_shift1就是前一天(2000-02-01)的价格100,完美匹配你计算日收益率的需求——日收益率公式通常是(当日价格 - 前一日价格)/前一日价格,用shift(1)刚好能拿到前一日的价格。
补充:shift(-1)才是取后一行内容
如果想获取下一个单元格(后一个时间点)的内容,你需要用shift(-1)。还是上面的例子,调用df['价格'].shift(-1)会得到:
| 日期 | 价格 | 价格_shift-1 |
|---|---|---|
| 2000-02-01 | 100 | 105 |
| 2000-02-02 | 105 | 110 |
| 2000-02-03 | 110 | NaN |
这时候2000-02-02对应的就是2月3日的价格110了。
内容的提问来源于stack exchange,提问作者Sohail Jaffry
相关产品推荐
相关产品推荐

