我根据谷歌分析数据得到以下df:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
在上面的df中,交易12345的first_transaction_flag为Y,这意味着这是客户的第一笔交易。
我需要添加第二个标记为first_channel的标记。它应该做的是为那个客户标记该渠道,在那里他们被收购作为所有后续交易的first_channel = Y.这将是输出:
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
基本上,它将是一个条件if语句:如果first_transaction_flag = Y,则将客户和媒介的相同组合标记为Y.我试图考虑是否可以使用loc或np.where语句,但没有& #39;远远不够。
答案 0 :(得分:3)
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
在该组的所有索引中广播它。
答案 1 :(得分:0)
可能有更好的方法来解决您的问题,但这也有效:
fc = df[df['first_transaction_flag'] == 'Y'][['Customer', 'medium']]
fc['first_channel'] = 'Y'
df = df.merge(fc, how='outer').fillna(0)