Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:从列中删除正在进行的值_Python_Pandas_Preprocessor - Fatal编程技术网

Python:从列中删除正在进行的值

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,

以下问题: 我有一个大的时间序列数据框架,其中包含股票指数的总回报。当股票从指数中退出时,该值将被设置为常量,直到数据框中的最后一个日期我想在值为常量时(一旦从索引中退出)将其设置为NaN。我该怎么做


您可以取
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请查看更新