Python lambda 基于两列中的条件

Python lambda based on condition in two columns

我需要在我的数据框中添加一个指示器列,用促销代码标记用户(如果有促销则为 1,否则为 0)。我需要查看两列,看看 col_promo_1、col_promo_2 中是否存在任何促销代码。这是我正在使用的代码,但它 returns Nan 值:

df['promo_ind'] = df[['col_promo_1', 'col_promo_2']].apply(lambda x: 1 if x is not None else 0) 

但是,当我使用只有一列的代码时,例如 col_promo_1,结果是准确的。关于如何修复此问题的任何想法?

新建一个专栏:

df['promo_ind'] = 0

您可以构建一个掩码并使用它在正确的位置设置值:

df.loc[df['col_promo_1'].notna() | df['col_promo_2'].notna(), 'promo_ind'] = 1

按照您的方法,假设您有下面的示例 DataFrame (df),其中包含两列(promo1promo2),目标是在第三列,如果用户使用促销 1 或促销 2。

import pandas as pd

df = pd.DataFrame(data={'promo1': [0, 1, 0, 1], 'promo2': [0, 0, 1, 1]})

下面的行创建了第三列,检查每一行的两个现有列并相应地计算相应的促销状态。 (发布的代码的问题是“x”在 DataFrame 中一一列,尽管你想获取行并检查它们。解决方法是为 apply() 方法设置属性 axis=1。 )

df['promo_ind'] = df[['promo1', 'promo2']].apply(lambda row: 0 if (row['promo1']==0 and row['promo2']==0) else 1, axis=1)