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

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

我使用了以下方法:

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

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

如何替换这一列的值?


当前回答

您需要选择该列:

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

其他回答

我们可以用以下语法更新df中的First Season列:

df['First Season'] = expression_for_new_values

要映射First Season中的值,我们可以使用pandas的.map()方法,语法如下:

data_frame(['column']).map({'initial_value_1':'updated_value_1','initial_value_2':'updated_value_2'})

有点晚了,但仍然-我更喜欢在以下地方使用numpy:

import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])

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

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