Я пытаюсь создать функцию, которая принимает несколько аргументов, но, похоже, она не работает. Текущий код:
def atomic(x):
if np.in1d(x['concept:name'], 'W_Completeren aanvraag').sum() > 3:
x['result'] = True
else:
x['result'] = False
return x
df.groupby(['case:concept:name']).apply(atomic)
Этот код добавляет столбец «результат» в df со значением True или False, в зависимости от результата оператора if.
Я хочу, чтобы переменные, видимые в операторе if, т. е. «x ['concept: name»]» и «W_Completeren aanvraag», были аргументом. Таким образом, решение будет примерно таким:
def atomic(x, key, check):
if np.in1d(x[key], check).sum() > 3:
x['result'] = True
else:
x['result'] = False
return x
df.groupby(['case:concept:name']).apply(atomic('concept:name', 'W_Completeren aanvraag'))
Тем не менее, переменная x не вызывается, когда я пишу ее таким образом, но я не могу понять, почему она вообще работает, не присваивая аргументу «x» значение в первую очередь. Выдает ошибку TypeError: atomic() missing 1 required positional argument: 'x'
У кого-нибудь есть идея?
Метод pandas.DataFrame.apply может получать аргументы для вашей функции:
df.groupby(['case:concept:name']).apply(atomic, 'concept:name', 'W_Completeren aanvraag')
именно то, что мне нужно. Большое спасибо!