import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'A': [10, 20, 30, 40],
'B': [5, 15, 25, 35],
'C': [100, 200, 300, 400]
})
print("原始数据:")
print(df)
# 方法1:使用shift()计算差值
df_diff = df.shift(-1) - df # 第n+1行减第n行
df_result = df_diff.shift(1) # 将结果下移一行,使结果对应到第n行
df_result.iloc[-1] = pd.NA # 最后一行没有n+1行,设为NA
print("\n方法1结果(使用shift):")
print(df_result)
# 方法2:使用diff()函数
df_result2 = df.diff(periods=-1) # 计算后一行减当前行的差值
df_result2 = df_result2.shift(1) # 将结果下移一行
df_result2.iloc[-1] = pd.NA
print("\n方法2结果(使用diff):")
print(df_result2)
# 方法3:直接赋值给原DataFrame(修改原数据)
df_original = df.copy()
for i in range(len(df_original)-1):
df_original.iloc[i] = df.iloc[i+1] - df.iloc[i]
df_original.iloc[-1] = pd.NA
print("\n方法3结果(直接赋值):")
print(df_original)
核心思路就是用shift(-1)获取下一行的值,减去当前行,再用shift(1)把结果移回来。用diff(periods=-1)也能直接算后一行减当前行的差。
建议直接用df.diff(periods=-1).shift(1)最简洁。