python 基于条件 if 逻辑的标志使用三个不同的列
python flag based on conditional if logic using three different columns
我有以下基于 google 分析数据的 df:
Customer | transaction_id | medium | first_transaction_flag
ABC 12345 organic Y
ABC 23456 email 0
ABC 34567 organic 0
BCD 45678 organic 0
BCD 56789 referral 0
在上面的 df 中,交易 12345 的 first_transaction_flag 为 Y,这意味着这是客户有史以来的第一笔交易。
我需要添加标记为 first_channel 的第二个标志。它应该做的是为那个渠道的那个客户标记,在所有后续交易中,他们被获取为他们的 first_channel = Y。这将是输出:
Customer | transaction_id | medium | first_transaction_flag | first_channel
ABC 12345 organic Y Y
ABC 23456 email 0 0
ABC 34567 organic 0 Y
BCD 45678 organic 0 0
BCD 56789 referral 0 0
基本上,这将是一个条件 if 语句:如果 first_transaction_flag = Y,则将相同的客户和媒介组合标记为 Y。我试图考虑是否可以使用 loc 或 np.where 声明,但没走多远。
可能有更好的方法来解决您的问题,但这适用于:
fc = df[df['first_transaction_flag'] == 'Y'][['Customer', 'medium']]
fc['first_channel'] = 'Y'
df = df.merge(fc, how='outer').fillna(0)
cols = ['Customer', 'medium']
col = 'first_transaction_flag'
df.assign(first_channel=df.groupby(cols)[col].transform('first'))
Customer transaction_id medium first_transaction_flag first_channel
0 ABC 12345 organic Y Y
1 ABC 23456 email 0 0
2 ABC 34567 organic 0 Y
3 BCD 45678 organic 0 0
4 BCD 56789 referral 0 0
解释
'first'
将获取组内的第一个结果,然后 transform
将其广播到该组的所有索引中。
我有以下基于 google 分析数据的 df:
Customer | transaction_id | medium | first_transaction_flag
ABC 12345 organic Y
ABC 23456 email 0
ABC 34567 organic 0
BCD 45678 organic 0
BCD 56789 referral 0
在上面的 df 中,交易 12345 的 first_transaction_flag 为 Y,这意味着这是客户有史以来的第一笔交易。
我需要添加标记为 first_channel 的第二个标志。它应该做的是为那个渠道的那个客户标记,在所有后续交易中,他们被获取为他们的 first_channel = Y。这将是输出:
Customer | transaction_id | medium | first_transaction_flag | first_channel
ABC 12345 organic Y Y
ABC 23456 email 0 0
ABC 34567 organic 0 Y
BCD 45678 organic 0 0
BCD 56789 referral 0 0
基本上,这将是一个条件 if 语句:如果 first_transaction_flag = Y,则将相同的客户和媒介组合标记为 Y。我试图考虑是否可以使用 loc 或 np.where 声明,但没走多远。
可能有更好的方法来解决您的问题,但这适用于:
fc = df[df['first_transaction_flag'] == 'Y'][['Customer', 'medium']]
fc['first_channel'] = 'Y'
df = df.merge(fc, how='outer').fillna(0)
cols = ['Customer', 'medium']
col = 'first_transaction_flag'
df.assign(first_channel=df.groupby(cols)[col].transform('first'))
Customer transaction_id medium first_transaction_flag first_channel
0 ABC 12345 organic Y Y
1 ABC 23456 email 0 0
2 ABC 34567 organic 0 Y
3 BCD 45678 organic 0 0
4 BCD 56789 referral 0 0
解释
'first'
将获取组内的第一个结果,然后 transform
将其广播到该组的所有索引中。