Есть ли надежный способ определить и вызвать функции на dataframe в Python - PullRequest
1 голос
/ 13 мая 2019

У меня есть фрейм данных, содержащий данные электронной почты потребителя - свежие и повторные контактные электронные письма.Мне нужно найти выбросы в этих данных на основе определенных условий:

  • условие 1: count1 > 1 и count 2 > 1
  • условие 2: count1 > 1 и count 2 < 1

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

def outlier():
    for index, row in df.iterrows():
        if([row][count1] > 1 and [row][count2] > 1):
            if(df[row][Journey] == df[row][journey_lag]):
                df[row][outlier] = Same_Property/Date/Agent/Journey
            else:
            df[row][outlier] = Same_Property/Date/Agent-Different Journey
        elif([row][count1] > 1 and [row][count2] == 1):
            if(df[row][Journey] == df[row][journey_lag]):
                df[row][outlier] = Same_Property/Date-Different_Agent/Journey
            else:
                df[row][outlier]=Same_Property/Date_Different_Agent/Journey
return df 

Я ожидаю выполнить эту функцию с кадром данных следующим образом:

df.outlier
df.apply(outlier)

Ошибка: не удалось получить результаты запроса

1 Ответ

1 голос
/ 13 мая 2019

Когда вы используете .apply(my_function) для DataFrame объектов, pandas ожидает функцию с 1 аргументом, и этот аргумент будет столбцом DataFrame, если axis=0, строкой DataFrame, если axis=1.

Вам нужно что-то вроде этого:

def outlier(row):
    if row['count1'] > 1 and row['count2'] > 1:
        if row['Journey'] == row['journey_lag']:
            return 'Same_Property/Date/Agent/Journey'
        else:
            return 'Same_Property/Date/Agent/Different_Journey'
    elif row['count1'] > 1 and row['count2'] == 1:
        if row['Journey'] == row['journey_lag']:
            return 'Same_Property/Date/Different_Agent/Journey'
        else:
            return 'Same_Property/Date/Different_Agent/Different_Journey'

df['outlier'] = df.apply(outlier, axis=1)
...