在同一列上应用条件和更新

时间:2016-09-25 17:03:14

标签: python pandas

我编写了以下语句来更新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)

3 个答案:

答案 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)

使用方法whereother参数:

(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)