2017-09-07 10 views
0

私は、次のDFがありますのpythonパンダ:1列目のルックアップ値は、他の列を条件

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      

は、私が実際に第1の媒体でカラムを追加する必要があります。 、基本的には、どんなは「first_transaction_flag」= Yを持つトランザクションの「中」列の値である

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_medium」の列。

私は本当に@piSquared以前の回答のいずれかの助けを借りて解決すると思います。

df['first_medium'] = df.lookup(df.Customer, df.medium) 

しかし==「Y」

これは前に頼まれたならば、私は見つけることができませんでしたので、申し訳ありません、それ

答えて

1

まずfirst_transaction_flagためnp.where声明でこれを組み合わせる方法がわかりません顧客によってインデックス付け直列に第1の媒体を得る:

01:

first_medium = df.loc[ 
    df['first_transaction_flag'] == 'Y', 
    ['Customer', 'medium'] 
].set_index('Customer')['medium'] # makes it a series 

次に検索を行います

最後の.valuesは、インデックスで割り当てられないようにするために必要です。

+0

ありがとうございます!私は.set_indexの前に構文エラーがあります。私が別のものを追加しようとすると、「あまりにも多くの値をアンパックする」と言われます。 – jeangelj

+0

ありがとうございます。私はValueErrorを取得します:値の長さはインデックスの長さと一致しません – jeangelj

+0

ああ、データフレームではなく、シリーズにするのを忘れていました(そして今度はダブルチェックしてください!) – IanS

関連する問題