【问题标题】:Pandas: Selecting rows and columns based on a subset of columns that contain a certain valuePandas:根据包含特定值的列子集选择行和列
【发布时间】:2019-05-17 23:09:26
【问题描述】:

假设我有一个列名如下的数据框:

col_id_1, col_id_2, ..., col_id_m, property_1, property_2 ..., property_n

例如,我如何在所有col_ids 中搜索值5(请注意5 不会出现在同一行的多个col_ids 中),然后选择包含此值的所有行?最重要的是,一旦我发现所有行的 col_id 包含值 5,我会将所有 col_ids 与值 5 合并到单个 id 列中,并且只选择 property_8property_25000 作为附加列。

在这种情况下,我会有一个包含以下列的表格:

id, property_8, property_25000

其中id 列仅包含值为5 的行。在 pandas 中这样的事情是可能的吗?

【问题讨论】:

  • 您能否在您的问题中添加一个输入数据框示例以及所需结果数据框的示例?

标签: python pandas


【解决方案1】:

IIUC,首先 filter 你的列包含 col_id,然后我们使用任何检查 any 列是否有数字 5

df.loc[df.filter(like='col_id').eq(5).any(1),['property_8','property_25000']].assign(id=5)

【讨论】:

  • "...(注意 5 不会出现在同一行的多个 col_ids 中)..." - any 而不是 all,然后这是完美的。
  • 有人认为这个答案是low quality,可能是因为没有解释。
  • @SpghttCd 未删除 :-)
  • 感谢@WeNYoBen 的回答,不幸的是,我的问题设置不正确,并遗漏了另一条重要信息。我想我得开始一个新话题了。
  • @indigoblue 如果是这样的话,您愿意接受其中一个答案吗?
【解决方案2】:

您可以使用创意列表理解(用于列名称)来优化此答案。一种简单的方法可能是使用 OR | ... 或者 AND & 进行子集化

df_new = df[(df['col_id_1'] == 5) | (df['col_id_2'] == 5) | (df['col_id_3'] == 5)]

df_new 将代表一个反映您的参数的数据框,然后您可以相应地对列进行子集化

df_new = df_new[['id', 'propert_8', 'property_25000']]

【讨论】:

  • 感谢您的尝试回答。如果我们有 1e6 col_ids,这似乎需要太多的手动输入。
猜你喜欢
  • 2020-11-15
  • 2020-04-06
  • 1970-01-01
  • 2021-09-15
  • 2018-09-04
  • 2016-05-28
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
相关资源
最近更新 更多