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

标签 python pandas dataframe nan

我有一个 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/

相关文章:

python - 我怎样才能让 pandas 时间戳抵消一定的月数?

python - 使用 Pandas 展平嵌入式 key

python - for循环用于数据帧的计算

python - 根据列值对数据框行重新排序

python - Django 模型集查找非常慢

python - 一个 wsgi 应用程序吞噬了所有 apache 客户端

python - pandas.to_datetime() 如何从本地时区转换为 UTC unix 时间戳?

r - 仅将嵌套数据帧的一列除以整数值

python - 将Unicode文本写入文本文件?

python - 如何加速 SQLAlchemy 查询?