python - 如何更改满足给定条件的列值,同时保持该列不满足条件的值
问题描述
在我的 pandas 数据框中,我有两列我正在考虑X1和Score。我打算重新计算并将值重新分配给列Score中的值,但相应的X1列小于500。Score中不满足此条件的值应保持原样。
目前,当我在下面运行代码时,它正确更改了满足条件的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的值
解决方案
我认为你需要改变:
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
。
推荐阅读
- java - 在显示场景之前获取节点的大小
- c# - unity - 围绕 Y 轴旋转物体,同时不断设置不同的朝向地面的旋转
- python-3.x - 如何使用 PyTesseract 去除图像噪声以改善结果?
- bash - 如何编写一个 bash 函数来检测给定输入是否以千字节“K”或兆字节“M”结尾?
- tooltip - amCharts 4:仅在截断(带省略号)值上显示图例工具提示
- css - 即使在 flexbox 布局中,SVG 元素也会增加父级大小
- javascript - How to add a message and remove it when a select box changes value in JavaScript?
- amazon-web-services - 创建临时凭证以将文件上传到 S3 存储桶
- android - 如果在前台应用程序时点击消息,nativescript-plugin-firebase 云消息传递应用程序崩溃
- python - 串行端口 - 无法读取数据,我只是写了