【问题标题】:How to compare Pandas dataframe values with a list, and put the result in a new column如何将 Pandas 数据框值与列表进行比较,并将结果放入新列
【发布时间】:2018-11-20 04:07:43
【问题描述】:

我有以下曼哈顿街区的数据集,每个街区都有最常见的场所:

df

我列出了场地清单:

fit_venues = ['Coffee Shop', 'Café', 'Park', 'Hotel', 'Sandwich Place', 'Pizza Place', 'Gym / Fitness Center', 'Exhibit', 'Gym', 'Supermarket', 'Nightclub', 'Concert Hall', 'Jazz Club']

我想在数据框中添加一列(例如,我们称之为“Fit Neighborhood”),并将每个社区最常见的场所(5 列)与列表“fit_venues”进行比较。然后我们将结果分配给“Fit Neighborhood”列(是/否或真/假)。例如,前两行应返回 Yes/True,第三行应返回 No/False。

有什么帮助吗?

【问题讨论】:

  • 欢迎您!您能否将输入数据的最小样本添加为文本,并提供您想要的相应输出?并提供您已经为生成输出所做的任何尝试。
  • 请编辑您的问题以添加print(yourdataframe.head()) 的输出,以便我们查看您使用的数据类型。
  • 有一个类似的问题,有一个扩展的解释here

标签: python pandas


【解决方案1】:

您是否尝试过使用DataFrame.isin()?

你没有给我最常见的场地列的名称,所以我假设它们是 DataFrame 中唯一的列 (df):

fit_venues = ['Coffee Shop', 'Café', 'Park', 'Hotel', 'Sandwich Place', 'Pizza Place', 'Gym / Fitness Center', 'Exhibit', 'Gym', 'Supermarket', 'Nightclub', 'Concert Hall', 'Jazz Club']

df['Fit Neighborhood'] = df.isin(fit_venues).any()

【讨论】:

  • 我做到了。它为所有人分配了 NaN!
  • 您是否也尝试过不使用 any()?
  • 是的,它为所有记录分配了 False
【解决方案2】:

看看这是否有效:

 fit_venues = ['Coffee Shop', 'Café', 'Park', 'Hotel', 'Sandwich Place', 'Pizza Place', 'Gym / Fitness Center', 'Exhibit', 'Gym', 'Supermarket', 'Nightclub', 'Concert Hall', 'Jazz Club']

df["binary_check"] = df[df["5th Most Common Venue"].isin(fit_venues)]

【讨论】:

  • 它给了我错误:ValueError:错误的项目数通过了 7,位置意味着 1 但是,我需要与从第 1 到第 5 的所有常见场所列进行比较。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多