代码之家  ›  专栏  ›  技术社区  ›  Jonas Palačionis

基于条件的函数在pandas数据帧序列中的应用

  •  0
  • Jonas Palačionis  · 技术社区  · 5 年前

    我的数据帧:

    数据框

    A            B
    first        True 
    second       False
    third        False
    fourth       True
    fifth        False
    

    期望输出

    A            B          C
    first        True       en
    second       False      
    third        False
    fourth       True       en
    fifth        False
    

    我试图将函数应用于列 C 只有当 B 列是 True .

    我用的东西

    if (df['B'] == True)):
        df['C'] = df['A'].apply(
            lambda x: TextBlob(x).detect_language())
    

    ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
    

    我试过的

    df['B'].bool()
    df['B'] is True
    df['B'] == 'True'
    

    但错误仍然存在,不确定如何形成一个声明,说“只有在B列是真的”。

    1 回复  |  直到 5 年前
        1
  •  2
  •   jezrael    5 年前

    如果需要缺少未匹配行的值,请在之前筛选行 apply 仅用于处理具有 True 学生:

    df['C'] = df.loc[df['B'], 'A'].apply(lambda x: TextBlob(x).detect_language())
    print (df)
            A      B    C
    0   first   True   en
    1  second  False  NaN
    2   third  False  NaN
    3  fourth   True   en
    4   fifth  False  NaN
    

    或者如果对于不匹配的值需要空字符串,但是 应用 正在处理所有列:

    df['C'] = np.where(df['B'], df['A'].apply(lambda x: TextBlob(x).detect_language()), '')
    print (df)
            A      B   C
    0   first   True  en
    1  second  False    
    2   third  False    
    3  fourth   True  en
    4   fifth  False