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
),其中包含两列(promo1
和 promo2
),目标是在第三列,如果用户使用促销 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)
我需要在我的数据框中添加一个指示器列,用促销代码标记用户(如果有促销则为 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
),其中包含两列(promo1
和 promo2
),目标是在第三列,如果用户使用促销 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)