如何在Python中根据当前值重新计算列的值?
我需要把一列中的数值乘以2.2,但只有当这些数值小于30的时候才这样做。希望能得到一些帮助。
这是我尝试过的代码。我知道这完全不对,但我不知道该怎么做。我刚学python,所以请原谅我这个很傻的问题。
小于30的数值是以千克为单位的,需要转换成磅。
df['Weight']=np.where(df['Weight'] > 30, df['Weight']*2.2)
2 个回答
0
你使用 np.where()
的思路是对的,但你需要调整一下条件和当条件不满足时该怎么处理。
你可以把 np.where()
看作是一个 if else 的判断。如果第一个条件成立(也就是 df['Weight'] > 30),那么就用第二个参数来更新这个值(在你的例子中是乘以 2.2)。 但是如果条件不成立呢? 这就是你需要给这个方法提供第三个参数的原因,它告诉你如果第一个条件不成立该怎么做。
修正后的代码是:
df['Weight'] = np.where(df['weight'] < 30, df['weight'] * 2.2, df['weight'])
2
假设你有一个这样的数据表:
df = pd.DataFrame({"weight": [10, 20, 30, 40, 50]})
weight
0 10
1 20
2 30
3 40
4 50
你可以用 .loc
这样来选择数据:
df.loc[df["weight"] < 30, "weight"] = df["weight"] * 2.2
weight
0 22
1 44
2 30
3 40
4 50
想了解更多关于如何选择数据的信息,可以点击 这里。
你也可以使用 DataFrame.where
(注意不是 numpy.where
):
df["weight"] = df.where(df["weight"] >= 30, df["weight"] * 2.2, axis=0)
weight
0 22
1 44
2 30
3 40
4 50
或者你可以使用 DataFrame.mask
:
df["weight"] = df.mask(df["weight"] < 30, df["weight"] * 2.2, axis=0)
weight
0 22
1 44
2 30
3 40
4 50