基于 Pandas 数据框列的条件应用函数

3

我是Pandas的新手

我的数据框:

df

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

当列 BTrue 时,我正在尝试将函数应用于列 C

我使用的内容

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列为True”的语句。 感谢您的建议。
1个回答

3

如果想要没有匹配行的缺失值,则在 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

如果需要对于未匹配的值返回空字符串,但是要对所有列进行 apply 处理:

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    

所以在任何形式中都不需要使用==True吗?我认为语句df['B']表示行不为空,而不是其中的值不是False - Jonas Palačionis
@JonasPalačionis - 如果是布尔值,则不需要这样做,对于df['B'] == False也可以使用~df['B'] - jezrael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接