如何在Python中根据当前值重新计算列的值?

0 投票
2 回答
47 浏览
提问于 2025-04-14 17:10

我需要把一列中的数值乘以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

撰写回答