在Pandas中,如何仅对包含nan的列中的数值执行.diff()方法?



我有一个Pandas数据集,我想计算一个列元素与同一列的另一个元素的差异。为此,最直观的方法是.diff()

到目前为止,一切顺利。问题是我的列包含没有特定顺序模式的nan值,就像下面的示例一样,列名为col:

| col |
|-----|
0 |  1  |
1 | NaN |
2 |  3  |
3 |  4  |
4 | NaN |
5 | NaN |
6 | 10  |
7 | NaN |
8 | 13  |

我想做的是将.diff()方法仅应用于列的前面的数值,使得期望的答案为:

| col |
|-----|
0 | NaN |
1 | NaN |
2 |  2  |
3 |  1  |
4 | NaN |
5 | NaN |
6 |  6  |
7 | NaN |
8 |  3  |

如果它是nan值的周期性顺序,我可以使用.diff()方法的periods参数,如这里所解释的。然而,考虑到nan值以随机顺序出现,我想知道如何做到这一点?

您需要设置dropnareindex的临时变量,如下所示:

import numpy as np
df = pd.DataFrame({"col": [1, np.nan, 3, 4, np.nan, np.nan, 10, np.nan, 13]})
idx = df.index  # create index from original data
tmp = df.dropna()  # drop nan rows
tmp.diff().reindex(idx)  # reindex to original index
>>>
| col |
|-----|
0 | NaN |
1 | NaN |
2 |  2  |
3 |  1  |
4 | NaN |
5 | NaN |
6 |  6  |
7 | NaN |
8 |  3  |

最新更新