如何为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
相关产品推荐
相关产品推荐

