如何更改满足给定条件的列值,同时保持不满足条件的该列的值

时间:2021-02-16 06:06:35

标签: python pandas dataframe numpy

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

目前,当我运行下面的代码时,它会正确更改满足条件 X1 列小于 500< /strong>),但未重新计算的 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)

我该如何解决这个问题?

NB df.iloc[:,21] 表示Score

列的值

1 个答案:

答案 0 :(得分:1)

我认为你需要改变:

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 中的条件匹配的值。