0

I have the following dataframe:

import pandas as pd

data = {'selectionId': [8567238,7450487,12787737,9541421,10162696,7208966,8826166,7256678],

 'Price': [4.1,4.6,5.5,7.2,7.8,17.0,32.0,34.0],

 'Win_Percentage': [0.245870,0.212396,0.178922,0.145448,0.111974,0.078501,0.045027,0.011553],

  'Fit':[0.245870,0.212396,0.178922,0.145448,0.111974,0.078501,0.045027,0.011553],

   'size':[2.708701,2.373962,2.039223,1.704484,1.369744,1.035005,0.700266,0.365527]}

df = pd.DataFrame(data, columns=['selectionId', 'Price', 'Win_Percentage','Fit','size'])

I also have the following function:

def test(marketId, selectionId):

    global place_order_Req

    place_order_Req = '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"' + marketId + '","instructions":'\


'[{"selectionId":"' + str(
        selectionId) + '","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1.9","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}'"""
print(place_order_Req)
"""

The marketId variable always has value marketId = "1.156196315"

I would like to pass the selectionId value in df to the function.

I would also like to pass the values of the size column to the function to change "size":"1.9" part of the function.

To summarise I would like the following to be returned from the function:

'{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"8567238","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"2.708701","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}\n    print(place_order_Req)\n    '

and for this to be done for each row of the dataframe.

To do this I have tried the following:

selectionId = df['selectionId']

size = df['size'].astype(str)

def test(marketId, selectionId, size):

    global place_order_Req, place_order_Req_list, place_order_Req_size_list

    place_order_Req_list = []

    place_order_Req_size_list = []

    for i in selectionId:
        place_order_Req = '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"' + marketId + '","instructions":'\
                                                                                                                              '[{"selectionId":"' + str(
            i) + '","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}'
        """
    print(place_order_Req)
    """
        place_order_Req_list.append(place_order_Req)

    for j in place_order_Req_list:

        place_order_Req = place_order_Req[:208] + j + place_order_Req[:209]

        place_order_Req_size_list.append(place_order_Req)

    print(place_order_Req_size_list)

This changes the selectionId variable fine but when I try to change the "1.9" it does not work. It also returns itself twice for each input to the place_order_Req_size_list list.

I also think there must be a smarter way than using two loops.

This is the list that it returns:

['{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"8567238","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7450487","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"12787737","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"9541421","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"10162696","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7208966","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"8826166","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{', '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.156196315","instructions":[{"selectionId":"7256678","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":{']

Any help would be great, cheers. Sandy

3 Answers 3

2

You can just apply a function to each row of your data frame. You can read the fields 'selectionId' and 'size' for each row and pass them on to your place_order_Req variable. Also, I'm not sure if you actually need to define/use place_order_Req as a global variable.

def test(x):    
    marketId = "1.156196315" #static value
    selectionId = x['selectionId']
    size = x['size']

#     global place_order_Req
    place_order_Req = '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"' + marketId + '","instructions":' '[{"selectionId":"' + str(selectionId) + '","handicap":"0","side":"BACK","orderType":"LIMIT", "limitOrder":{"size": "'+ str(size) + '","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}'
    print(place_order_Req)

df.apply(test, axis=1)
Sign up to request clarification or add additional context in comments.

Comments

0

I've now reviewed the code and it works with the following but I still think there must be a better method than using two loops:

size = df['size'].astype(str)
size = '"' + size + '"'

def test(marketId, selectionId, size):

    global place_order_Req, place_order_Req_list, place_order_Req_size_list

    place_order_Req_list = []

    place_order_Req_size_list = []

    for i in selectionId:
        place_order_Req = '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"' + marketId + '","instructions":'\
                                                                                                                              '[{"selectionId":"' + str(
            i) + '","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"1","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}'
        """
    print(place_order_Req)
    """
        place_order_Req_list.append(place_order_Req)

    for j in size:

        place_order_Req = place_order_Req[:208] + j + place_order_Req[:209]

        place_order_Req_size_list.append(place_order_Req)

    print(place_order_Req_size_list)

Comments

0

You can use apply:

def query(marketId, selectionId, size):

    global place_order_Req

    place_order_Req = '{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"' + marketId + '","instructions":'\
                      '[{"selectionId":"' + str(selectionId) + '","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"size":"' \
                      + str(size) + '","price":"1.1","persistenceType":"LAPSE"}}],"customerRef":"test12121212121"}, "id": 1}'

    return place_order_Req

marketId = "1.156196315"
queries = df.apply(lambda x: query(marketId, x.selectionId, x.size), axis=1)

queries_list = queries.values.tolist() # list of your queries strings

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.