Python:从列中删除正在进行的值
以下问题: 我有一个大的时间序列数据框架,其中包含股票指数的总回报。当股票从指数中退出时,该值将被设置为常量,直到数据框中的最后一个日期我想在值为常量时(一旦从索引中退出)将其设置为NaN。我该怎么做Python:从列中删除正在进行的值,python,pandas,preprocessor,Python,Pandas,Preprocessor,以下问题: 我有一个大的时间序列数据框架,其中包含股票指数的总回报。当股票从指数中退出时,该值将被设置为常量,直到数据框中的最后一个日期我想在值为常量时(一旦从索引中退出)将其设置为NaN。我该怎么做 您可以取diff并用np.nans替换值,其中diff等于0,用替换为where(请注意,这是一种反向操作,“如果df不等于0,则取np.nan): 例如: df = pd.DataFrame({ 'x': [1, 2, 3, 3, 3, 3, 4, 5], 'y': [1, 1,
您可以取
diff
并用np.nan
s替换值,其中diff
等于0,用替换为where
(请注意,这是一种反向操作,“如果df
不等于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
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
更新仅删除序列结束前相同的值,我们可以找到要替换为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.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
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
非常感谢您的快速回答!但我想我的问题还不够清楚。对不起。我只想删除完全退出的值,直到时间序列结束。因此,此解决方案的问题是,它还删除了一段时间内(随机)相同的值(在股票实际上保持不变直到结束之前)因此,它删除了许多不应删除的值。@MaxN是的,对不起,这不清楚,让我更新答案…@MaxN请查看更新