Pandas DataFrame如何根据条件将连续相同值设为nan直到数值变化
实现思路
- 对
Value列的连续相同值进行分组,给每个连续组分配唯一的分组ID - 筛选出所有包含
Criterion=1的分组 - 将这些分组对应的
Value值全部替换为np.nan
完整实现代码
import pandas as pd import numpy as np # 构造示例数据 df = pd.DataFrame({ 'Value': [3,3,5,7,2,2,8,8,8,1], 'Criterion': [0,0,1,0,0,0,1,0,0,0] }) # 给连续相同的Value值打分组标签 df['value_group'] = (df['Value'] != df['Value'].shift()).cumsum() # 标记所有包含Criterion=1的分组 mask = df.groupby('value_group')['Criterion'].transform('any') # 替换符合条件的分组的Value为nan df.loc[mask, 'Value'] = np.nan # 删除辅助列 df = df.drop(columns='value_group') print(df)
输出结果
Value Criterion 0 3.0 0 1 3.0 0 2 NaN 1 3 7.0 0 4 2.0 0 5 2.0 0 6 NaN 1 7 NaN 0 8 NaN 0 9 1.0 0
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

