我有一个简单的数据帧如下所示:
我想从“第一赛季”列中选择所有的值,并将那些超过1990年的值替换为1。在这个例子中,只有Baltimore Ravens将1996替换为1(保持其余数据不变)。
我使用了以下方法:
df.loc[(df['First Season'] > 1990)] = 1
但是,它将用1替换该行中的所有值,而不仅仅是“First Season”列中的值。
如何替换这一列的值?
我有一个简单的数据帧如下所示:
我想从“第一赛季”列中选择所有的值,并将那些超过1990年的值替换为1。在这个例子中,只有Baltimore Ravens将1996替换为1(保持其余数据不变)。
我使用了以下方法:
df.loc[(df['First Season'] > 1990)] = 1
但是,它将用1替换该行中的所有值,而不仅仅是“First Season”列中的值。
如何替换这一列的值?
当前回答
你也可以使用mask替换满足条件的值:
df['First Season'].mask(lambda col: col > 1990, 1)
其他回答
另一种选择是使用列表推导式:
df['First Season'] = [1 if year > 1990 else year for year in df['First Season']]
你也可以使用mask替换满足条件的值:
df['First Season'].mask(lambda col: col > 1990, 1)
您需要选择该列:
In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df
Out[41]:
Team First Season Total Games
0 Dallas Cowboys 1960 894
1 Chicago Bears 1920 1357
2 Green Bay Packers 1921 1339
3 Miami Dolphins 1966 792
4 Baltimore Ravens 1 326
5 San Franciso 49ers 1950 1003
这里的语法是:
df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]
你可以检查文档和10分钟的熊猫,它显示了语义
EDIT
如果你想生成一个布尔指示符,那么你可以使用布尔条件来生成一个布尔Series,并将dtype转换为int,这将分别将True和False转换为1和0:
In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df
Out[43]:
Team First Season Total Games
0 Dallas Cowboys 0 894
1 Chicago Bears 0 1357
2 Green Bay Packers 0 1339
3 Miami Dolphins 0 792
4 Baltimore Ravens 1 326
5 San Franciso 49ers 0 1003
有点晚了,但仍然-我更喜欢在以下地方使用numpy:
import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])
df['First Season'].loc[(df['First Season'] > 1990)] = 1
奇怪的是没有人知道这个答案,你的代码中唯一缺少的部分是df之后的['First Season'],只需删除里面的花括号。