You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Pandas DataFrame添加连续行差值行并消除NaN行

问题:在Pandas DataFrame中添加行差值行时避免生成NaN行

我有一个包含两行数据的Pandas DataFrame,想要添加一行展示这两行的差值。数据和DataFrame定义代码如下:

data = [
    (10, 20, 30, 40, 50, 60, 70),
    (10, 30, 30, 40, 50, 60, 100)
]
df = pd.DataFrame(data, columns=["a", "b", "c", "d", "d", "f", "g"])

用下面的代码尝试实现需求,但会额外生成一行全是NaN的行:

pd.concat([df, df.diff()])

执行结果如下:

a     b     c     d     d     f      g
0  10.0  20.0  30.0  40.0  50.0  60.0   70.0
1  10.0  30.0  30.0  40.0  50.0  60.0  100.0
0   NaN   NaN   NaN   NaN   NaN   NaN    NaN
1   0.0  10.0   0.0   0.0   0.0   0.0   30.0

请问如何在添加连续行差值行的同时避免生成NaN行?


解决方案

方法1:提取diff()后的有效行再拼接

df.diff()会生成与原DataFrame行数相同的结果,第一行因无前置行全为NaN,只需提取索引为1的差值行再拼接:

diff_row = df.diff().iloc[1:]
result = pd.concat([df, diff_row])

执行结果:

a     b     c     d     d     f      g
0  10.0  20.0  30.0  40.0  50.0  60.0   70.0
1  10.0  30.0  30.0  40.0  50.0  60.0  100.0
1   0.0  10.0   0.0   0.0   0.0   0.0   30.0

方法2:直接计算差值并添加

若确定只有两行数据,可直接计算第二行减第一行,构造新行后添加:

diff_row = df.iloc[1] - df.iloc[0]
diff_df = pd.DataFrame([diff_row.values], columns=df.columns, index=["diff"])
result = pd.concat([df, diff_df])

执行结果:

a     b     c     d     d     f      g
0     10.0  20.0  30.0  40.0  50.0  60.0   70.0
1     10.0  30.0  30.0  40.0  50.0  60.0  100.0
diff   0.0  10.0   0.0   0.0   0.0   0.0   30.0

方法3:使用append自动过滤NaN行

result = df.append(df.diff().dropna())

此方法会自动移除含NaN的行,结果与方法1一致。


内容的提问来源于stack exchange,提问作者Gaurang Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 07:23:31