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

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

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

我想做的是应用.diff()方法only to the preceding numerical values of the column,这样预期的答案是:

  | 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并设置一个临时变量,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  |

Python相关问答推荐

在输入行运行时停止代码

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´

使用Python异步地持久跟踪用户输入

我怎么才能用拉夫分拣呢?

一维不匹配两个数组上的广义ufunc

替换包含Python DataFrame中的值的<;

按最大属性值Django对对象进行排序

如何在Python中画一个只能在对角线内裁剪的圆?

Pip:卸载`-e`安装过程中安装的所有pkgs

获取给出特定产品的所有可能组合的数量

更改我的NN中的隐藏层数会导致错误

如何在Ubuntu上更新ChromeDriver二进制文件

如何在Python中更改按钮的值(Flask )

在Pandas 数据框中,可以有一些多索引列和一些单索引列吗?

Re.findall给出了不同的结果.

使用AUTO()扩展__new__中的python枚举

我怎样才能用python打印一个 map 对象?

Python拟合线到高维点并在它们之间采样

将函数拟合到曲线上,然后删除某些点

支持向量机模型突出错误的数据点作为支持向量