看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas
中的 shift()
方法用于对数据进行移位操作,即将数据移动到前后位置。它适用于 DataFrame 和 Series 以及分组数据类型。
DataFrame.shift(periods=1,
freq=None,
axis=0,
fill_value=None)
Series.shift(periods=1,
freq=None,
axis=0,
fill_value=None)
Index.shift(periods=1, freq=None)
ExtensionArray.shift(periods=1, fill_value=None)
SeriesGroupBy.shift(periods=1, freq=None, fill_value=None, suffix=None)
DataFrameGroupBy.shift(periods=1, freq=None, fill_value=None, suffix=None)
periods: 整数,默认为 1。
freq: 日期偏移量或字符串,默认为 None。
axis: {0 或 'index', 1 或 'columns'},默认为 0。
fill_value: 标量值,默认为 None。
返回一个 DataFrame 或 Series,取决于输入类型。返回的数据是移位后的新对象。
shift()
方法常用于时间序列分析、计算变化率、滞后变量等。例如,计算股票价格的日变化率时,需要将当天的价格与前一天的价格进行比较。
import pandas as pd
# 构造示例数据
data = pd.Series([10, 20, 30, 40, 50])
# 原始数据
print("原始数据:\n", data)
# 向下移位 1 步
shifted_data = data.shift()
# 结果数据
print("向下移位 1 步后的数据:\n", shifted_data)
输出:
原始数据:
0 10
1 20
2 30
3 40
4 50
dtype: int64
向下移位 1 步后的数据:
0 NaN
1 10.0
2 20.0
3 30.0
4 40.0
dtype: float64
# 构造示例数据
data = {
'A': [1, 2, 3, 4, 5],
'B': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)
# 原始数据
print("原始数据:\n", df)
# 向下移位 2 步
shifted_df = df.shift(periods=2)
# 结果数据
print("向下移位 2 步后的数据:\n", shifted_df)
输出:
原始数据:
A B
0 1 10
1 2 20
2 3 30
3 4 40
4 5 50
向下移位 2 步后的数据:
A B
0 NaN NaN
1 NaN NaN
2 1.0 10.0
3 2.0 20.0
4 3.0 30.0
# 使用填充值进行移位
shifted_df_fill = df.shift(periods=1, fill_value=0)
# 结果数据
print("使用填充值进行移位后的数据:\n", shifted_df_fill)
输出:
使用填充值进行移位后的数据:
A B
0 0 0
1 1 10
2 2 20
3 3 30
4 4 40
# 沿列方向移位 1 步
shifted_df_axis1 = df.shift(periods=1, axis=1)
# 结果数据
print("沿列方向移位 1 步后的数据:\n", shifted_df_axis1)
输出:
沿列方向移位 1 步后的数据:
A B
0 NaN 1
1 NaN 2
2 NaN 3
3 NaN 4
4 NaN 5
# 构造示例时间序列数据
date_range = pd.date_range(start='2024-01-01', periods=5, freq='D')
time_series = pd.Series([1, 2, 3, 4, 5], index=date_range)
# 原始数据
print("原始时间序列数据:\n", time_series)
# 按天移位
shifted_time_series = time_series.shift(periods=1, freq='D')
# 结果数据
print("按天移位后的时间序列数据:\n", shifted_time_series)
输出:
原始时间序列数据:
2024-01-01 1
2024-01-02 2
2024-01-03 3
2024-01-04 4
2024-01-05 5
Freq: D, dtype: int64
按天移位后的时间序列数据:
2024-01-02 1
2024-01-03 2
2024-01-04 3
2024-01-05 4
2024-01-06 5
Freq: D, dtype: int64
# SeriesGroupBy:
lst = ['a', 'a', 'b', 'b']
ser = pd.Series([1, 2, 3, 4], index=lst)
ser
a 1
a 2
b 3
b 4
dtype: int64
ser.groupby(level=0).shift(1)
a NaN
a 1.0
b NaN
b 3.0
dtype: float64
# DataFrameGroupBy:
data = [[1, 2, 3], [1, 5, 6], [2, 5, 8], [2, 6, 9]]
df = pd.DataFrame(data, columns=["a", "b", "c"],
index=["tuna", "salmon", "catfish", "goldfish"])
df
a b c
tuna 1 2 3
salmon 1 5 6
catfish 2 5 8
goldfish 2 6 9
df.groupby("a").shift(1)
b c
tuna NaN NaN
salmon 2.0 3.0
catfish NaN NaN
goldfish 5.0 8.0
通过以上示例,展示了 shift()
方法的基本使用和一些常见场景。这些示例帮助理解如何在不同的情况下使用移位操作。
更新时间:2024-07-23 18:26:44 标签:pandas python 移位