我有一个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
值以随机顺序出现,我想知道如何做到这一点?
您需要设置dropna
和reindex
的临时变量,如下所示:
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 |