首页 > 解决方案 > Pandas:如果变量为真,则返回特征名称

问题描述

我有一个约 2M 字符串的列表和一个约 800 个单词的列表。我创建了一个数据框,其中字符串作为行,单词作为列。除字符串变量外,所有其他变量都是对应于单词是否在字符串中的真或假值。没有缺失值。

IE

import pandas as pd
df = pd.DataFrame({'strings':['a string with california', 
                              'a string with lobster', 
                              'a str with california and lobster'],
                         'california':[True,False,True],
                         'lobster':[False,True,True],
                         'string':[True,True,False],})

因为数据框太长太宽,无法一次查看,所以我想要一个变量来列出对该特定行具有真实值的列名。例如,

df_filtered = pd.DataFrame({'strings':['a string with california', 
                              'a string with lobster', 
                              'a str with california and lobster'],
                   'matches':[['string','california'],
                              ['string', 'lobster'],
                              ['california', 'lobster']],
                         'california':[True,False,True],
                         'lobster':[False,True,True],
                         'string':[True,True,False],})

我是 pandas 的新手,我发现我可以使用以下命令创建一个包含缺失值的列名列表

columns_w_na = df.columns[df.isnull().any()].tolist()

有没有一种方法可以为每一行类似地捕获具有特定值的列的名称并将其表示为列表?

标签: pythonstringpandasbooleanfiltering

解决方案


你可能想检查

df.eq(True).dot(df.columns+',').str[:-1].str.split()
0     [california,string]
1        [lobster,string]
2    [california,lobster]
dtype: object

推荐阅读