我有以下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
我需要添加一个包含实际第一个媒体的列。这是我要找的最终产品:
Customer | transaction_id | medium | first_transaction_flag | first_medium
ABC 12345 organic Y organic
ABC 23456 email 0 organic
ABC 34567 organic 0 organic
BCD 45678 organic 0 0
BCD 56789 referral 0 0
基本上,"媒体"的价值是什么?具有" first_transaction_flag"的交易的列= Y,在" first_medium"中复制该客户的所有交易的值。柱。
我认为在@piSquared之前的回答中,我真的很接近解决它。
df['first_medium'] = df.lookup(df.Customer, df.medium)
但不确定如何将此与np.where语句结合使用first_transaction_flag ==' Y'
很抱歉,如果之前有人询问,我无法找到它
答案 0 :(得分:1)
首先获得客户索引的系列中的第一个媒体:
first_medium = df.loc[
df['first_transaction_flag'] == 'Y',
['Customer', 'medium']
].set_index('Customer')['medium'] # makes it a series
然后进行查找:
df['first_medium'] = first_medium.loc[df['Customer']].fillna(0).values
最后.values
是必要的,因此分配不是由索引完成的。