python标志基于使用三个不同列的条件if逻辑

时间:2017-09-06 20:16:53

标签: python pandas if-statement conditional where-clause

我根据谷歌分析数据得到以下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;远远不够。

2 个答案:

答案 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)