Pandas基于df.query条件提取触发匹配的对应列名实现方法咨询
实现方法
你可以通过pandas的行遍历筛选列名实现需求,代码如下:
import pandas as pd # 你的原始数据 df_data = pd.DataFrame({'Car':[1,2,3,4],'Renault':[1,0,0,0],'Volkswagen':[0,1,0,0],'Porsche':[0,0,1,0],'Mercedes':[1,1,0,0]}) # 定义参与isGerman判断的德系品牌列 german_brands = ['Volkswagen', 'Porsche', 'Mercedes'] # 方法1:apply行遍历实现,逻辑清晰适合小数据量 df_data['isGermanDetails'] = df_data[german_brands].apply( lambda row: ', '.join(row[row == 1].index), axis=1 ) # 方法2:dot矩阵运算实现,效率更高适合十万行以上的大数据量 # df_data['isGermanDetails'] = (df_data[german_brands] == 1).dot( # df_data[german_brands].columns + ', ' # ).str.rstrip(', ') print(df_data)
逻辑说明
- 首先筛选出所有参与
isGerman判断的德系品牌列,排除非相关的Car、Renault列 - 逐行匹配值为1的列,将对应的列名用逗号拼接,无匹配项的行自动返回空字符串,完全符合你要求的输出效果。
输出结果和你给出的示例完全一致:
Car Renault Volkswagen Porsche Mercedes isGermanDetails 0 1 1 0 0 1 Mercedes 1 2 0 1 0 1 Volkswagen, Mercedes 2 3 0 0 1 0 Porsche 3 4 0 0 0 0
内容的提问来源于stack exchange,提问作者Alejandro A
相关产品推荐
相关产品推荐

