假设我有一个数据列,其列名如下:
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
列,也只能选择id
和property_8
作为附加列。
在这种情况下,我将创建一个包含以下列的表:
property_25000
其中id, property_8, property_25000
列仅包含值为id
的行。熊猫有可能发生这种事吗?
答案 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']]