Pandas DataFrame:根据条件替换列中的所有值

新手上路,请多包涵

我有一个简单的 DataFrame,如下所示:

熊猫数据框

我想从“第一季”列中选择所有值,并将超过 1990 年的值替换为 1。在此示例中,只有巴尔的摩乌鸦队会将 1996 年替换为 1(保持其余数据不变)。

我使用了以下内容:

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

但是,它将该行中的所有值替换为 1,而不仅仅是“第一季”列中的值。

如何仅替换该列中的值?

原文由 ichimok 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 578
2 个回答

您需要选择该列:

 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 minutes to pandas

编辑

如果你想生成一个布尔指标,那么你可以只使用布尔条件来生成一个布尔系列并将 dtype 转换为 int 这将转换 TrueFalse 分别为 10

 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

原文由 EdChum 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

原文由 Amir F 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题