0

I have a dataframe offer_received_datalike this:

            customer_id                 offer_id                              time  offer_received offer_viewed 
0   78afa995795e4d85b5d9ceeca43f5fef    9b98b8c7a33c4b65b9aebfe6a799e6d9       0.0    1            0    
53176   78afa995795e4d85b5d9ceeca43f5fef    5a8bc65990b245e5a138643cd4eb9837   7.0    1            0    
150598  78afa995795e4d85b5d9ceeca43f5fef    ae264e3637204a6fb9bb56bc8210ddfd   17.0   1            0    

and a dataframe portfolio like this:

offer_id    reward  difficulty  duration    informational   discount    bogo    mobile  social  web
0   ae264e3637204a6fb9bb56bc8210ddfd    10  10  7   0   0   1   1   1   0

Here is my code:

# loop through each received offer
def get_offer_row(offer_received_data, portfolio):
    
    offer_row = []
    
    widgets=[
        ' [', progressbar.Timer(), '] ',
        progressbar.Bar(),
        ' (', progressbar.ETA(), ') ',
    ]
    
    for ind in progressbar.progressbar(range(len(offer_received_data)), widgets=widgets):
        
        for i in range(offer_received_data.shape[0]):
            
    # fetch an offer id 
            offer_id = offer_received_data.iloc[i]['offer_id']
            print(offer_id)   
    # get offer_id row from portfolio
            offer_row = portfolio.loc[portfolio['offer_id'] == offer_id]

            return offer_row
get_offer_row(offer_received_data, portfolio)

This returns:

9b98b8c7a33c4b65b9aebfe6a799e6d9

offer_id    reward  difficulty  duration    informational   discount    bogo    mobile  social  web
3   9b98b8c7a33c4b65b9aebfe6a799e6d9    5   5   7   0   0   1   1   0   1

It's only returning one row, not iterating each row at all, can someone have a look at my code, what have I done wrong? Many thanks.

wawawa
  • 2,835
  • 6
  • 44
  • 105
  • return offer_row - return ends the function. Did you mean for a list or array to accumulate all the offer_row instead of this and return all of them AFTER the for? Or did you mean to call get_offer_row inside a for loop? – Abel Jul 31 '20 at 19:24

1 Answers1

3

Your return is within the iteration loop. Either move it out of the loop or change it for a yield

drops
  • 1,524
  • 1
  • 11
  • 20