我编写了以下语句来更新DataFrame(df)
中的列 score
0 6800
1 7200
2 580
3 6730
df ["得分"] =(df ["得分"] / 10).where(df ["得分"]> 999)
我们的想法是清理分数列以删除额外的' 0'最后,只有当数字大于999时才保持不变。但是,我得到以下结果。
0 680.0
1 720.0
2 NaN
3 673.0
另外,我希望结果为整数。
我的预期输出
0 680
1 720
2 580
3 673
更新
以下为我工作
df["score"] = np.where(df["score"] > 999, df["score"]/10, df["score"]).astype(int)
答案 0 :(得分:2)
在numpy
中执行,并使用masks:
df['score'][df['score']>999] /= 10
为了易读,您可以这样做:
f = df['score']
f[f>999] /= 10
df['score']>999
将创建一个掩码,bool
数组,其形状与df['score']
相同,并且在值的位置具有True
/ False
值/不满足给定条件。例如,在上面的例子中:
In [27]: df['score']>999
Out[27]:
0 True
1 True
2 False
3 True
Name: score, dtype: bool
您可以使用此掩码直接索引数组/数据帧,仅提取匹配的元素:
In [28]: df['score'][df['score']>999]
Out[28]:
0 6800
1 7200
3 6730
Name: score, dtype: int64
我们将所有匹配元素除以10并使用/= 10
直接指定结果:
In [29]: df['score'][df['score']>999] /= 10
In [30]: df['score']
Out[30]:
0 680
1 720
2 580
3 673
Name: score, dtype: int64
答案 1 :(得分:0)
使用方法where
的other
参数:
(df["score"]/10).where(df["score"] > 999, other=df["score"])
0 680.0
1 720.0
2 580.0
3 673.0
答案 2 :(得分:-1)
以下为我工作
df [“得分”] = np.where(df [“得分]]> 999,df [”得分“] / 10,df [”得分“])。astype(int)