Pandas DataFrame使用多个输入将lambda函数应用于多列

2024-10-04 11:28:19 发布

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

好吧,我真的被卡住了

我有两张桌子

1)包含电话呼叫数据 2) 里面有订单数据

两者都有分钟、小时、天、月、年和帐号字段

如果在通话时间的2分钟内创建了订单,我想将“订单详情”添加到“电话呼叫”表中

我已经厌倦了很多事情,但是我很难理解如何用我的函数将多个变量传递给lambda函数

我也尝试过使用merge来合并这两个表,但我似乎无法确定分钟数是否在一个范围内

我试过两个功能

def get_order_from_call_time_and_person(row):


    order = orders_df[(orders_df["hour_created"] == row["HOUR"]) & 
          (orders_df["minute_created"] >= row["MINUTE"]) & 
          (orders_df["minute_created"] <= row["MINUTE"]+2) & 
          (orders_df["year_created"] == row["YEAR"]) & 
          (orders_df["month_created"] == row["MONTH"]) & 
          (orders_df["day_created"] == row["DAY"]) & 
          (orders_df["slaccount"] == row["oprano"])]

    try:
        value = order["value"][0]
        quoteno = order["quoteno"][0]
        cost = order["costvalue"][0]
        orderno = order["ordernumber"][0]
        margin = order["value"][0] - order["costvalue"][0]
        return value, margin, cost, int(quoteno), orderno
        print( "OK")
    except:
        return "none", "none" , "none", "none", "none"
        print("Not Found")

def get_order_from_call_time_and_person1(mn,hr,dy,mt,yr,ac):

    order = orders_df[(orders_df["hour_created"] == hr) & 
          (orders_df["minute_created"] >= mn) & 
          (orders_df["minute_created"] <= mn+2) & 
          (orders_df["year_created"] == yr) & 
          (orders_df["month_created"] == mt) & 
          (orders_df["day_created"] == dy) & 
          (orders_df["slaccount"] == ac)]

    try:
        value = order["value"][0]
        quoteno = order["quoteno"][0]
        cost = order["costvalue"][0]
        orderno = order["ordernumber"][0]
        margin = order["value"][0] - order["costvalue"][0]
        return value, margin, cost, int(quoteno), orderno
        print( "OK")
    except:
        return "none", "none" , "none", "none", "none"
        print("Not Found")

还有我试过的电话号码

test_df['value'], test_df['margin'],test_df['cost'],test_df['quote_no'],test_df['order_no'] = zip(*test_df.apply(get_order_from_call_time_and_person, axis=1))

同样采用这种格式(这些不是“我的列名”,但效果相同):

df[['NewCol', 'NewCol2']] = df[['TimeCol','ResponseCol']].apply(segmentMatch, axis=1)

工作并返回值的列表

从呼叫时间和人员1获取订单(51,16,11,62013,“AAA1”)

有人能帮我怎么做吗


Tags: margin订单testnonedfvalueorderrow