Python 我想使用diff函数从前一个非空列中减去每一列

Python 我想使用diff函数从前一个非空列中减去每一列,python,pandas,Python,Pandas,我有一个很长的列列表,我想从当前列中减去前一列,并用差值替换当前列。 因此,如果我有: A B C D 1 NaN 3 7 3 NaN 8 10 2 NaN 6 11 我希望输出为: A B C D 1 NaN 2 4 3 NaN 5 2 2 NaN 4 5 我一直在尝试使用以下代码: df2=df1.diff(轴=1) 但这并不能产生期望的输出 提前感谢。实际上,它正在生成所需的结果,但您正在尝试计算nan值上的差异

我有一个很长的列列表,我想从当前列中减去前一列,并用差值替换当前列。 因此,如果我有:

A   B   C   D
1  NaN  3   7
3  NaN  8   10
2  NaN  6   11
我希望输出为:

A   B   C   D 
1  NaN  2   4
3  NaN  5   2
2  NaN  4   5
我一直在尝试使用以下代码: df2=df1.diff(轴=1) 但这并不能产生期望的输出


提前感谢。

实际上,它正在生成所需的结果,但您正在尝试计算
nan
值上的差异,该值将为
nan
,因此差异按预期工作。 对于您的情况,只需从原始数据帧中获取第一列,您就可以了

df2=df1.diff(axis=1) 
df2.A=df1.A

print(df2)
输出

A   B   C   D
1   NaN 2.0 4.0

您可以使用
df.where
执行此操作,然后
update
数据帧的每一行返回第一个
非空的
条目

样本数据:
df
代码: 输出:
df\u d

为了让输出有意义,您需要包含多行。现在编辑,希望它更清晰。
     A    B    C    D
0  1.0  NaN  3.0  7.0
1  1.0  4.0  5.0  9.0
2  NaN  4.0  NaN  4.0
3  NaN  4.0  NaN  NaN
4  NaN  NaN  3.0  7.0
5  3.0  NaN  NaN  7.0
6  6.0  NaN  NaN  NaN
df_d = df.where(df.isnull(), 
                df.fillna(method='ffill', axis=1).diff(axis=1))
df_d.update(df.where(df.notnull().cumsum(1).cumsum(1) == 1))
     A    B    C    D
0  1.0  NaN  2.0  4.0
1  1.0  3.0  1.0  4.0
2  NaN  4.0  NaN  0.0
3  NaN  4.0  NaN  NaN
4  NaN  NaN  3.0  4.0
5  3.0  NaN  NaN  4.0
6  6.0  NaN  NaN  NaN