python pandas:在一列中查找值以其他列为条件

时间:2017-09-07 14:12:36

标签: python pandas if-statement match vlookup

我有以下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'

很抱歉,如果之前有人询问,我无法找到它

1 个答案:

答案 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是必要的,因此分配不是由索引完成的。