熊猫-如果dtype列表(对象)的列中的值具有特定值,则查找行

时间:2020-06-27 11:40:29

标签: python pandas dataframe

给出如下数据框

   A  B  C-1  D  BTP           Type C1           Type C2
0  0  1    0  0    0               NaN          [Type B]
1  0  2    1  1   14          [Type B]          [Type B]
2  0  3    2  2   28          [Type A]          [Type B]
3  0  4    3  3   42  [Type A, Type B]  [Type A, Type B]
4  0  5    4  4   56          [Type A]  [Type A, Type B]

想为列Type A取值为Type C1的行,为列42BTP的行,它们应返回行索引3。

尝试以下操作,但给出错误KeyError: False

df.loc[(df['BTP'] == 42) & ('Type A' in df['Type C1'])]

我最终想做的是获取符合上述条件的行(将是单行),并提取列BC-1的值作为字典,例如{'B_val': 4, 'C_val': 3}

3 个答案:

答案 0 :(得分:1)

使用Series.str.join加入False列中的列表,然后我们可以在此列上使用Series.str.contains来检查给定的字符串Type C1是否为是否存在于系列中,最后我们可以使用布尔值Type A过滤数据帧的行:

mask

结果:

mask = df['BTP'].eq(42) & df['Type C1'].str.join('-').str.contains(r'\bType A\b')
df = df[mask]

答案 1 :(得分:1)

您可以使用

let format = DateFormatter()      
format.dateFormat = "yyyy-MM-dd HH:mm:ss Z" // <- format of model.timestampName
let date = format.date(from: tryItNow)       

答案 2 :(得分:0)

我用一个自定义函数解决了这个问题,它根据所考虑的列表是否包含'Type A',为每行返回一个True / False值列表。

# Check if elem is present in column 'col'
def has_elem(col, elem):
    result = []
    for c in col:
        if elem in c:
            result.append(True)
        else:
            result.append(False)
    return result

# Filter
df.loc[(df['BTP'] == 42) & has_elem(df['Type_C1'], 'Type A'), :]

您的代码不起作用的原因是,第二个过滤器子句'Type A' in df['Type_C1']在Series对象'Type A'中查找字符串df['Type_C1']的成员身份,并因此返回{{1} }。相反,您需要返回一个True / False值序列,数据框中的每一行返回1。