熊猫:根据包含特定值的列子集选择行和列

时间:2019-05-17 23:09:26

标签: python pandas

假设我有一个数据列,其列名如下:

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

例如,我将如何在所有col_id中搜索值5(请注意,5不会出现在多个col_id中在同一行中),然后选择包含该值的所有行?最重要的是,一旦找到所有包含值col_id的{​​{1}}的行,就将所有5和值col_id合并为一个5列,也只能选择idproperty_8作为附加列。

在这种情况下,我将创建一个包含以下列的表:

property_25000

其中id, property_8, property_25000列仅包含值为id的行。熊猫有可能发生这种事吗?

2 个答案:

答案 0 :(得分:3)

IIUC,首先在您的filter列中包含col_id,然后我们使用任何检查来检查any列是否为数字5

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

答案 1 :(得分:0)

您可以通过广告素材列表理解(针对列名)优化此答案。一种简单的方法可能是使用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']]