Panda DataFrame применяет лямбда-функцию к нескольким столбцам, используя несколько входов - PullRequest
0 голосов
/ 19 сентября 2019

Хорошо, я в порядке и действительно застрял !!

У меня есть две таблицы

1) с данными телефонного звонка в нем 2) с данными заказа в нем

оба имеют поля минуты, часа, дня, месяца, года и номера счета.

Я хочу добавить "детали заказа" в таблицу "телефонных звонков", ЕСЛИ в течение 2 минут был создан заказвремени звонка.

Я УСТАЛА множество вещей, но изо всех сил пытаюсь понять, как передать несколько переменных в лямбда-функцию с моей функцией?

Я также пытался использовать слияние для объединения двух таблиц, но я не могу указать, что минуты находятся в диапазоне.

две функции, которые я пробовал.

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)

Работает и возвращает список значений

get_order_from_call_time_and_person1 (51,16,11,6,2013, "AAA1")

Может кто-нибудь помочь с тем, как я могу работать это ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...