Python中Dataframe如何实现将第n+1行各列的值减去第n行,结果赋于第n行

Dataframe 如何实现将第 n+1 行各列的值减去第 n 行,结果赋于第 n 行
Python中Dataframe如何实现将第n+1行各列的值减去第n行,结果赋于第n行

4 回复

df.iloc[n,:]-=df.iloc[n+1,:]


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)最简洁。

貌似写反了
df.iloc[n,:]=df.iloc[n+1,:]-df.iloc[n,:]

回到顶部