【问题标题】:Python: Is there an easier way to apply map() on pandas DataFrame? [duplicate]Python:有没有更简单的方法在 pandas DataFrame 上应用 map()? [复制]
【发布时间】:2020-04-13 00:31:08
【问题描述】:

我创建了一个布尔目录并应用到来自同一个 DataFrame (star_wars) 的六个不同系列。它有效,但很好奇是否有比仅更改列标题重复相同语法更简单的方法?

seen_boolean = {'Star Wars: Episode I  The Phantom Menace': 'Yes', 'NaN': 'No', 'Star Wars: Episode II  Attack of the Clones': 'Yes', 'Star Wars: Episode III  Revenge of the Sith': 'Yes', 'Star Wars: Episode IV  A New Hope': 'Yes', 'Star Wars: Episode V The Empire Strikes Back': 'Yes', 'Star Wars: Episode VI Return of the Jedi': 'Yes'}

star_wars['seen_1'] = star_wars['seen_1'].map(seen_boolean)
star_wars['seen_2'] = star_wars['seen_2'].map(seen_boolean)
star_wars['seen_3'] = star_wars['seen_3'].map(seen_boolean)
star_wars['seen_4'] = star_wars['seen_4'].map(seen_boolean)
star_wars['seen_5'] = star_wars['seen_5'].map(seen_boolean)
star_wars['seen_6'] = star_wars['seen_6'].map(seen_boolean)

【问题讨论】:

  • 好像star_wars.notna().replace({True:'Yes',False:'No'})
  • 这不是 notna(),目标是将电影名称替换为“是”,除非它是 NaN,然后​​替换为“否”。六个系列中的每个系列都有不同的电影名称。
  • @user699217 这就是 anky 的建议,如果不是 NaN 则进行测试,如果为 True,则替换为 yes,如果不为 true(因此为 NaN),则替换为 No。

标签: python pandas boolean


【解决方案1】:

我想到了两种方法:

堆栈/取消堆栈:

star_wars.stack().map(seen_boolean).unstack()

通过默认的 pandas 迭代器遍历你的列(但不是真正的优雅/Pandas 风格):

for col in star_wars:
  star_wars[col] = star_wars[col].map(seen_boolean)

【讨论】:

  • 成功了!由于列在 3:9 的位置,我进行了一些编辑,我不得不在 star_wars.columns[3:9] 中使用 for col
  • 好的,我实际上将其标记为 dup,请参阅 stackoverflow.com/a/43725843/10974969
猜你喜欢
  • 2017-11-14
  • 2023-02-21
  • 2011-04-22
  • 1970-01-01
  • 2010-11-03
  • 2020-08-22
  • 1970-01-01
  • 2017-05-13
  • 2019-01-15
相关资源
最近更新 更多