Pandas DataFrame.shift(~)
方法将行或列移动指定的量,而不更改 DataFrame 的大小。
参数
1. periods
| int
要移动的量。如果axis=0
(默认值),则正整数表示行向下移动,而负整数表示行向上移动。相同的逻辑适用于axis=1
(列移位)。
2. freq
| string
或 DataOffset
或 tseries.offsets
或 timedelta
| optional
如果指定,则将移动日期索引而不是行/列。仅当源 DataFrame 的索引是 DatetimeIndex
时,这才相关。请查看下面的示例以进行说明。
3. axis
| int
或 string
| optional
是否移动行或列:
轴 |
说明 |
---|---|
|
行将被移动。 |
|
列将被移动。 |
默认情况下,axis=0
。
4. fill_value
| object
| optional
用于填充新移动的行/列的值。默认 fill_value
取决于列的数据类型:
-
对于 date-related 类型,
fill_value=NaT
。 -
否则,
fill_value=NaN
。
返回值
索引、行或列已移动的新 DataFrame
。
例子
考虑以下 DataFrame :
df = pd.DataFrame({"A":["a","b","c","d"],"B":["e","f","g","h"],"C":["i","j","k","l"]})
df
A B C
0 a e i
1 b f j
2 c g k
3 d h l
基本用法
向下移动 2 行:
df.shift(2)
A B C
0 NaN NaN NaN
1 NaN NaN NaN
2 a e i
3 b f j
向上移动 2 行:
df.shift(-2)
A B C
0 c g k
1 d h l
2 NaN NaN NaN
3 NaN NaN NaN
请注意索引没有移动,即索引仍然是 [0,1,2,3]
。
移动列
默认情况下, axis=0
,这意味着行发生移位。要移动列,请像这样传递axis=1
:
df.shift(2, axis=1)
A B C
0 NaN NaN a
1 NaN NaN b
2 NaN NaN c
3 NaN NaN d
再次注意列值的变化,但不注意列标签的变化。
指定fill_value
我们可以指定我们自己的填充值,而不是使用默认的 NaN
填充,如下所示:
df.shift(fill_value=0)
A B C
0 0 0 0
1 0 0 0
2 a e i
3 b f j
指定频率
当 DataFrame 是时间序列时,freq
参数发挥作用。
为了进行演示,请考虑以下时间序列 DataFrame:
index_date = pd.date_range("2020-12-25", periods=4, freq="D")
df = pd.DataFrame({"A":["a","b","c","d"],"B":["e","f","g","h"],"C":["i","j","k","l"]}, index=index_date)
df
A B C
2020-12-25 a e i
2020-12-26 b f j
2020-12-27 c g k
2020-12-28 d h l
要将索引移动 3 天:
df.shift(freq="3D")
A B C
2020-12-28 a e i
2020-12-29 b f j
2020-12-30 c g k
2020-12-31 d h l
请注意索引中的日期已移动 3 天,但值(例如 a
、 b
等)根本没有移动。
您还可以组合 period
和 freq
。要将索引移动 2*3=6 days
:
df.shift(2, freq="3D")
A B C
2020-12-31 a e i
2021-01-01 b f j
2021-01-02 c g k
2021-01-03 d h l
不直观的行为
考虑以下 DataFrame :
index_date = pd.date_range("2020-12-29", periods=4, freq="D")
df = pd.DataFrame({"A":["a","b","c","d"],"B":["e","f","g","h"],"C":["i","j","k","l"]}, index=index_date)
df
A B C
2020-12-29 a e i
2020-12-30 b f j
2020-12-31 c g k
2021-01-01 d h l
设置 freq="M"
会产生:
df.shift(periods=1, freq="M")
A B C
2020-12-31 a e i
2020-12-31 b f j
2021-01-31 c g k
2021-01-31 d h l
结果有点不直观,因为我们期望将 one-month 偏移量应用于每个日期索引。
请注意以下事项:
-
每个日期索引都转移到月底。
-
由于我们指定了
freq="M"
,因此日期索引的日单位变得无关紧要。 -
例外情况是当日单位位于月末时(例如
12-31
),在这种情况下,月份将发生偏移(例如01-31
)。
相关用法
- Python PySpark DataFrame show方法用法及代码示例
- Python Pandas DataFrame shape属性用法及代码示例
- Python Pandas DataFrame sample方法用法及代码示例
- Python Pandas DataFrame swaplevel方法用法及代码示例
- Python PySpark DataFrame sampleBy方法用法及代码示例
- Python Pandas DataFrame set_axis方法用法及代码示例
- Python Pandas DataFrame select_dtypes方法用法及代码示例
- Python PySpark DataFrame selectExpr方法用法及代码示例
- Python PySpark DataFrame select方法用法及代码示例
- Python Pandas DataFrame stack方法用法及代码示例
- Python Pandas DataFrame sort_index方法用法及代码示例
- Python Pandas DataFrame size属性用法及代码示例
- Python Pandas DataFrame set_index方法用法及代码示例
- Python Pandas DataFrame swapaxes方法用法及代码示例
- Python PySpark DataFrame sort方法用法及代码示例
- Python PySpark DataFrame sample方法用法及代码示例
- Python Pandas DataFrame sub方法用法及代码示例
- Python Pandas DataFrame sem方法用法及代码示例
- Python Pandas DataFrame sum方法用法及代码示例
- Python Pandas DataFrame std方法用法及代码示例
- Python PySpark DataFrame summary方法用法及代码示例
- Python Pandas DataFrame sort_values方法用法及代码示例
- Python Pandas DataFrame slice_shift方法用法及代码示例
- Python Pandas DataFrame squeeze方法用法及代码示例
- Python Pandas DataFrame empty属性用法及代码示例
注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 Pandas DataFrame | shift method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。