为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas:如果变量为真,则返回特征名称

Pandas:如果变量为真,则返回特征名称

慕工程0101907 2021-10-26 16:46:45
我有一个 ~2M 个字符串的列表和一个 ~800 个单词的列表。我创建了一个数据框,其中字符串作为行,单词作为列。除了字符串变量之外,所有其他变量都是真值或假值,对应于单词是否在字符串中。没有缺失值。IEimport pandas as pddf = 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()有没有一种方法可以为每一行类似地捕获具有特定值的列的名称并将其表示为列表?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

你可能想检查


df.eq(True).dot(df.columns+',').str[:-1].str.split()

0     [california,string]

1        [lobster,string]

2    [california,lobster]

dtype: object


查看完整回答
反对 回复 2021-10-26
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

使用apply与lambda表达式:


# setting axis=1 in apply means you are looking across rows

df['new'] = df.apply(lambda x: df.columns[x == True].values, axis=1)


                             strings  california  lobster  string  \

0           a string with california        True    False    True   

1              a string with lobster       False     True    True   

2  a str with california and lobster        True     True   False   


                     new  

0   [california, string]  

1      [lobster, string]  

2  [california, lobster]  


查看完整回答
反对 回复 2021-10-26
?
RISEBY

TA贡献1856条经验 获得超5个赞

上面的一个响应很好地创建了一个由逗号分隔的匹配项的括号字符串,这非常有帮助。我随后遇到了一个问题,我需要计算匹配短语的数量,这使得将列置于列表类型而不是字符串中更有帮助。


df['matches'] = df.eq(True).dot(df.columns+',').str[:-1].str.split(',')

df['num_matches'] = df['matches'].str.len()


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 227 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号