python Pandas : Drop ongoing values from column

标签 python pandas preprocessor

以下问题:
我有一个包含股票指数总返回的大时间序列数据框。当股票退出指数时,该值将被设置为常量,直到数据框中的最后一个日期。 我想将值设置为 NaN 一旦它们保持不变(一旦退出索引)。 我怎样才能做到这一点?
drop the yellow marked values (all but the first)

最佳答案

你可以拿diff并将值替换为 np.nan哪里diff等于 0 和 where (请注意,它有点相反,“如果不等于 0,则从 df 取值,否则 np.nan ):

df.where(df.diff().ne(0), np.nan)
例如:
df = pd.DataFrame({
    'x': [1, 2, 3, 3, 3, 3, 4, 5],
    'y': [1, 1, 1, 2, 3, 3, 3, 4],
})

df.where(df.diff().ne(0), np.nan)
输出:
     x    y
0  1.0  1.0
1  2.0  NaN
2  3.0  NaN
3  NaN  2.0
4  NaN  3.0
5  NaN  NaN
6  4.0  NaN
7  5.0  4.0
更新 为了只删除直到序列结束时相同的值,我们可以找到要替换的区间 np.nan s 与 diffcumsum :
df = pd.DataFrame({
    'x': [1, 2, 3, 3, 3, 3, 3, 3],
    'y': [1, 1, 1, 2, 3, 3, 3, 4],
})

df.where(
    df.diff().ne(0)[::-1].cumsum().ne(0)[::-1],
    np.nan)
输出:

     x  y
0  1.0  1
1  2.0  1
2  3.0  1
3  NaN  2
4  NaN  3
5  NaN  3
6  NaN  3
7  NaN  4

关于 python Pandas : Drop ongoing values from column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67314307/

相关文章:

Python为矩阵的下三角生成掩码

python - 如何只添加到 Python 中数组的对角线?

Python JSON 转储对象列表。

python - Pandas 情节中的小刻度线

visual-studio - 如何从命令行调用 Visual Studio 预处理器?

preprocessor - Inno Setup : How do I see the output (translation) of the Inno Setup Preprocessor?

python - 数据框生成自己的列名

python - 定义函数以基于其他列创建列(pandas)

python - Pandas bool 索引 : matching a set

css - Angular 元素中与 scss 和 css 混淆以及样式预处理器选项相关的错误