Python3 pandas groupby применить возвращаемое значение к списку

#python #python-3.x #pandas #dataframe #return

#python #python-3.x #pandas #фрейм данных #Возврат

Вопрос:

С помощью этого фрейма данных :

    index  order_id  id_product  qty  comments                 date last_name
0      0        55   100000158    2       NaN  2020-10-26T14:33:00     Stone
1      1        55   100000339    1       NaN  2020-10-26T14:33:00     Stone
  

Я создаю список, groupby и применяю :

 list_test = []

df_g = df.groupby('order_id')

df_g.apply(process_order,dealer_id,file)
  

Тестовая функция для проверки того, как вернуть элемент :

 def process_order(df,dealer_id,file):
    if True:
        return 'bob'
  

Как я могу добавить возвращаемую строку ‘test’ из process_order в список list_test ?

Итак, чтобы иметь в качестве результата :

 print(list_test)
['bob']
  

Комментарии:

1. Я признаю, что не понимаю, что вы пытаетесь здесь сделать. Я верю, что функции передаются для apply принятия только одного аргумента. Сказав это, единственный способ добавить элемент в список test_list — это получить ссылку на него из-за пределов области действия функции (например, если он объявлен, например, в модуле или в функции, в которую test_function вложен) или передать его в качестве аргумента функции.

2. Я пытаюсь перечислить ошибки в функции process_order(), чтобы обработать их позже. Если в функции process_order() все идет хорошо, то list_test должен быть пустым. Но если ошибка обнаружена, я хотел бы добавить ее в список

3. Вы можете добавить список ошибок к параметрам вашей функции и добавить любые подобные ошибки. def process_order(df,dealer_id,file, errors_list):

4. Как я уже сказал, есть два способа получить ссылку на этот список: передать его в качестве аргумента или получить к нему доступ из содержащей области. Вы даже можете импортировать его для другого модуля, если он был объявлен на уровне модуля (хотя я бы не рекомендовал это.)

Ответ №1:

Обратите внимание, что я согласен с другим ответившим человеком в том, что трудно понять, как / почему вы группируете так, как вы есть, но вы можете просто создать новый столбец с именем ‘test’ во время операции. Что-то вроде:

 df_g['test'] = df_g.apply(process_order,dealer_id,file)
  

После применения функции к группе или всему фрейму данных вы можете получить список, используя

 list_test = df_g['test'].tolist()
  

в зависимости от того, что находится в или не в, вам может потребоваться отфильтровать фрейм данных или группу для строк, где test пуст, перед созданием списка