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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。