在我的 Pandas 数据框中,我有两列我正在考虑 X1 和 Score。我打算重新计算并将值重新分配给 Score 列中的值,但其中相应的 X1 列小于 500。 Score 中不满足此条件的值应保持原样。
目前,当我运行下面的代码时,它会正确更改满足条件 (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
列的值答案 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
中的条件匹配的值。