以下问题:
我有一个包含股票指数总返回的大时间序列数据框。当股票退出指数时,该值将被设置为常量,直到数据框中的最后一个日期。 我想将值设置为 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 与 diff
和 cumsum
: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/