将不同类型的多个变量从数据帧传递到函数

2024-05-16 23:05:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧:

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'])

我还具有以下功能:

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)
"""

市场化变量总是有值marketId = "1.156196315"

我想将df中的selectionId值传递给函数

我还想将size列的值传递给函数,以更改函数的"size":"1.9"部分

总而言之,我希望函数返回以下内容:

'{"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    '

对于数据帧的每一行,都要这样做

为此,我尝试了以下方法:

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)

这会很好地更改selectionId变量,但当我尝试更改"1.9"时,它不起作用。对于place_order_Req_size_list列表的每个输入,它还返回自身两次

我还认为一定有比使用两个循环更聪明的方法

这是它返回的列表:

['{"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":{']

任何帮助都很好,干杯。 桑迪


Tags: sizebackparamssidemethodjsonrpclimitinstructions
3条回答

您可以使用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

我现在回顾了代码,它可以与以下内容一起使用,但我仍然认为一定有一种比使用两个循环更好的方法:

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)

您只需对数据帧的每一行应用一个函数。您可以读取每行的'selectionId''size'字段,并将它们传递给place_order_Req变量。另外,我不确定您是否真的需要将place_order_Req定义/使用为全局变量

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)

相关问题 更多 >