Как индексировать все строки в столбце и захватывать определенные элементы для создания нового столбца в Python?

#python #pandas #function #for-loop #indexing

#python #pandas #функция #for-цикл #индексирование

Вопрос:

В настоящее время я работаю над своим собственным проектом и пытаюсь создать новый столбец, основанный на условии оператора if, в котором я пытаюсь вернуть индексированный элемент из столбца. У меня возникают проблемы с индексацией всех строк, а затем с получением нужного мне конкретного индекса.

Обзор:

Имя набора данных = fivb_2019

«Результат» — это столбец объектов и итоговый счет волейбольного матча. Я пытаюсь использовать индексированный элемент этого столбца для создания нового столбца, например(set_one_points)

примеры значений строк
строки 5-7 в dataframe содержат значение ниже

                        0-2 (10-21, 16-21) 
                       
  

Я пытаюсь получить индексированное значение [5: 7] для команды хозяев и [8: 10] для команды гостей

 for i in fivb_2019['Result']:
print (i[5:7])
  

Когда я запускаю этот цикл for, я могу выдавать все результаты, которые я хочу для своего столбца, но когда я помещаю этот цикл for в свою функцию, я возвращаю только значение 10 для домашней команды с индексом [5: 7] и значение 21 с индексом [8: 10]. Вот функция:

 def fill_set_one (Result, teamid,home_teamid):
    for i in fivb_2019['Result']:
    
        if home_teamid == teamid:
            return (i[5:7])
        
        else:
            return (i[8:10])

fivb_2019['set_one_points'] = fivb_2019.apply(lambda x: fill_set_one(x['Result'], 
                                             x['teamid'], x['home_teamid']),axis=1)
  

Функция выполняется, но результаты из value_counts моего нового столбца [set_one_points] возвращают только эти значения:

 fivb_2019['set_one_points'].value_counts()
  

’10’ 111319 раз

’21’ 111236 раз

Я думаю, что когда я пытаюсь выполнить индексацию внутри функции i ([5: 7]), это может привести к захвату только столбцов с пятого по седьмой и строкового индекса ’10’. Потому что в последней строке кода вы можете видеть, что в строке 223765 и других 13 должно быть возвращаемым результатом.

                               1-2 (13-21, 21-14, 11-15)
  

Другие примеры строк

                        2-1 (16-21, 21-18, 22-20)
                       2-1 (18-21, 23-21, 16-14)
                       2-0 (21-19, 21-19)
  

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

Заранее спасибо за помощь, я ценю это.

Кайл

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

1. Я в замешательстве. Мое предположение, которое может быть совершенно неверным, заключается в том, что вы должны установить axis=0 . Но, опять же, это дикое предположение.

2. Спасибо за попытку, Тимус! Но когда я запускаю лямбда-выражение, ось должна быть равна 1, чтобы распознать столбцы