首页 > 解决方案 > 如何更改满足给定条件的列值,同时保持该列不满足条件的值

问题描述

在我的 pandas 数据框中,我有两列我正在考虑X1Score。我打算重新计算并将值重新分配给列Score中的值,但相应的X1列小于500Score中不满足此条件的值应保持原样。

目前,当我在下面运行代码时,它正确更改了满足条件的Score的值X1列小于500) ,但未重新计算的Score的值被转换为NaN而不是保持其原始值。

def do_not_try_this(df, card, feature, val):
    if df[df[feature]<val][feature].iloc[0] < val:
        current_score = card[feature]['points'].iloc[0]
        print('Current point', current_score)
        min_desired_score = card[feature].min()['points']
        print('Min point', min_desired_score)
        df.iloc[:,21] = (df[df[feature]<val]['scores'] + np.sum([current_score, min_desired_score])).astype(int)
    else:
        df['scores'] = df.iloc[:,21]
    
    return df

# Call Function
df = airtel_base_scores_df.copy(deep=True)
feature = 'X1'
val = 500

df = do_not_try_this(df, card, feature, val)

我该如何解决这个问题?

注意df.iloc[:,21] 表示列Score的值

标签: pythonpandasdataframenumpy

解决方案


我认为你需要改变:

df.iloc[:,21] = (df[df[feature]<val]['scores'] + np.sum([current_score, min_desired_score])).astype(int)

至:

df.iloc[:,21] = ( df['scores'].mask(df[feature]<val, df['scores'] + np.sum([current_score, min_desired_score]))).astype(int)

仅处理匹配条件的值Series.mask


推荐阅读