首页 > 解决方案 > 我想使用 diff 函数从前一个非空列中减去每一列

问题描述

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

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(axis=1) 但这不会产生所需的输出

提前致谢。

标签: pythonpandas

解决方案


你可以这样做df.where,然后为你的每一行update带回第一个条目。non-nullDataFrame

样本数据:df

     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))

输出:df_d

     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

推荐阅读