我有一个简单的数据帧如下所示:

我想从“第一赛季”列中选择所有的值,并将那些超过1990年的值替换为1。在这个例子中,只有Baltimore Ravens将1996替换为1(保持其余数据不变)。

我使用了以下方法:

df.loc[(df['First Season'] > 1990)] = 1

但是,它将用1替换该行中的所有值,而不仅仅是“First Season”列中的值。

如何替换这一列的值?


当前回答

对于单一条件,即。('employrate') > 70)

       country        employrate alcconsumption
0  Afghanistan  55.7000007629394            .03
1      Albania  51.4000015258789           7.29
2      Algeria              50.5            .69
3      Andorra                            10.17
4       Angola  75.6999969482422           5.57

用这个:

df.loc[df['employrate'] > 70, 'employrate'] = 7

       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   51.400002           7.29
2      Algeria   50.500000            .69
3      Andorra         nan          10.17
4       Angola    7.000000           5.57

因此这里的语法是:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

对于多种情况,即。(df['employrate'] <=55) & (df['employrate'] > 50)

用这个:

df['employrate'] = np.where(
   (df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate']
   )

out[108]:
       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   11.000000           7.29
2      Algeria   11.000000            .69
3      Andorra         nan          10.17
4       Angola   75.699997           5.57

因此这里的语法是:

 df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name'])

其他回答

另一种选择是使用列表推导式:

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)

对于单一条件,即。('employrate') > 70)

       country        employrate alcconsumption
0  Afghanistan  55.7000007629394            .03
1      Albania  51.4000015258789           7.29
2      Algeria              50.5            .69
3      Andorra                            10.17
4       Angola  75.6999969482422           5.57

用这个:

df.loc[df['employrate'] > 70, 'employrate'] = 7

       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   51.400002           7.29
2      Algeria   50.500000            .69
3      Andorra         nan          10.17
4       Angola    7.000000           5.57

因此这里的语法是:

df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]

对于多种情况,即。(df['employrate'] <=55) & (df['employrate'] > 50)

用这个:

df['employrate'] = np.where(
   (df['employrate'] <=55) & (df['employrate'] > 50) , 11, df['employrate']
   )

out[108]:
       country  employrate alcconsumption
0  Afghanistan   55.700001            .03
1      Albania   11.000000           7.29
2      Algeria   11.000000            .69
3      Andorra         nan          10.17
4       Angola   75.699997           5.57

因此这里的语法是:

 df['<column_name>'] = np.where((<filter 1> ) & (<filter 2>) , <new value>, df['column_name'])
df.loc[df['First season'] > 1990, 'First Season'] = 1

解释:

df。Loc有两个参数,'行索引'和'列索引'。我们检查“First season”列下的每一行值是否大于1990,然后将其替换为1。

df['First Season'].loc[(df['First Season'] > 1990)] = 1

奇怪的是没有人知道这个答案,你的代码中唯一缺少的部分是df之后的['First Season'],只需删除里面的花括号。