熊猫:如果变量为true,则返回要素名称

时间:2019-02-01 04:46:29

标签: python string pandas boolean filtering

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

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],})

我是熊猫的新手,并且发现可以使用以下命令创建缺少值的列名列表

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

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

3 个答案:

答案 0 :(得分:3)

您可能要检查

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

答案 1 :(得分:1)

使用slice()和lambda表达式:

const targetArray = [
    { targetKey: 'March' },
    { targetKey: 'Jan' },
    { targetKey: 'Feb' },
    { targetKey: 'Dec' }
];

let res = targetArray.slice(0).sort((a, b) => a.targetKey.localeCompare(b.targetKey));

console.log(targetArray)
console.log(res);

答案 2 :(得分:0)

上面的一个响应很好地创建了一个用逗号分隔的匹配括号括起来的字符串,这真的很有帮助。随后出现一个问题,我需要计算匹配短语的数量,这使得将列设置为列表类型而不是字符串更有用。

[
    {"col":4,"row":1,"size_x":1,"size_y":4}, 
    {"col":2,"row":2,"size_x":1,"size_y":2}, 
    {"col":1,"row":1,"size_x":3,"size_y":1},
    {"col":1,"row":4,"size_x":3,"size_y":1},
],
[
    {"col":1,"row":5,"size_x":4,"size_y":1}
]