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