我有一个 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
参数,如上所述 here 。但是,鉴于 nan
值以随机顺序出现,我想知道如何做到这一点?
最佳答案
您需要dropna
并设置一个临时变量,然后重新索引
,如下所示:
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 |
关于python - 在 Pandas 中,如何仅对也包含 NaN 的列中的数值执行 .diff() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72559010/