【问题标题】:How to change one cell in a Pandas Dataframe based on multiple conditions?如何根据多个条件更改 Pandas Dataframe 中的一个单元格?
【发布时间】:2021-01-25 13:58:16
【问题描述】:

我有一个大型数据框,涵盖 30 个国家/地区 70 年的 GDP 增长情况。数据如下所示:

GDP    Country    Year
10     US         2000
10.2   US         2001
0      US         2002
10.2   US         2003
10.4   US         2004
10.4   US         2005

我进行了计算,想用存储在名为us_2000 的变量中的浮点数替换第三行中的0

我尝试过使用

df.loc[(df.Country == "US") & (df.Year == 2002), "GDP"] = us_2000

但它不起作用,我收到以下警告消息:

C:\Users\graha\anaconda3\lib\site-packages\IPython\core\interactiveshell.py:3331: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  exec(code_obj, self.user_global_ns, self.user_ns)

数据是从 API 下载的,不幸的是,该 API 使索引成为带有国家名称和日期时间的可怕字符串。有没有一种方法可以根据 Country 和 Year 值仅重新分配一个值,而无需重置索引?

【问题讨论】:

  • 它对我来说没有错误...但是要避免这种情况...我认为最好使用.wherenp.where。以下是语法:df['GDP'] = df['GDP'].where(~((df.Country == "US") & (df.Year == 2002)), us_2000)df['GDP'] = np.where((df.Country == "US") & (df.Year == 2002), us_2000, df['GDP'])
  • 好的,谢谢,我试试看。
  • 我仍然遇到与上述相同的错误。不过感谢您的帮助!
  • 那这行代码是不是这个问题?在对数据框创建 lsice 之前,您应该使用 df1 = df.copy() 复制它,然后使用 df1 = etc..
  • 好的,谢谢

标签: python pandas dataframe assign


【解决方案1】:

试试:

df.loc[(df.Country == "US") & (df.Year == 2002)]["GDP"] = us_2000

【讨论】:

  • 分配给数据帧的副本不是这里需要的。查找“链式索引”
猜你喜欢
  • 2017-08-27
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-02
  • 1970-01-01
  • 2021-05-21
  • 1970-01-01
相关资源
最近更新 更多