Pandas совпадение нескольких столбцов, а затем обратный сдвиг, чтобы найти значение - PullRequest
0 голосов
/ 21 октября 2019

Буду очень признателен за вашу помощь в этом. Я noob из Pandas Python, и меня бросили в углубление с этой проблемой.

Я просмотрел около 100 различных запросов на этом сайте и не могу найти что-то подходящее. Самое близкое, что я получил, - это применение логических масок.

Пожалуйста, нажмите на текст ниже, чтобы найти мой фрейм данных.

Я хотел бы выполнить запрос нанабор данных, чтобы найти предыдущую строку, в которой в столбце «HomeTeam» находится строка «AwayTeam» -> Затем я хотел бы получить значение «home_form» для этого совпадения в виде дополнительного столбца

Дата HomeTeam AwayTeam home_form away_form new_column
25/08/2019 Страсбург Rennes 1.0 3.0 Nan (строка 25, просто пример)
01.09.2009 Rennes Nice 3.0 3.0 3.0 (строка 37, только пример)

Я хочу получить предыдущее значение 'away_form' для последней строки, где в столбце AwayTeam появился HomeTeam

1 Ответ

0 голосов
/ 21 октября 2019

Это не полное решение, но я думаю, что нашел способ помочь вам добиться некоторого прогресса.

Вот шаги:

  1. Создайте образец кадра данных, просто дляИллюстрация
  2. Преобразование столбца «HomeTeam» в список… это целевой столбец.

  3. Создать пустой список для хранения результатов поиска «HomeTeam»'column

  4. Перебирать команды в столбце' AwayTeam '

  5. Использовать метод Python list.index (), чтобы получить индекс индексасовпадать… но использовать попытку, за исключением случая, когда вы не найдете совпадения.

  6. Сохранить результат в списке

  7. Когда закончитес помощью цикла for добавьте список в качестве нового столбца в фрейм данных pandas.

import pandas as pd
import numpy as np

# create sample dataframe
df = pd.DataFrame({
    'Date': ['2019-08-18', '2019-08-25'], 
    'HomeTeam': ['Rennes', 'Strasbourg'],
    'AwayTeam': ['Paris SG', 'Rennes'],
    'home_form': [np.NaN, 1.0],
    'away_form': [np.NaN, 3.0],
})

# convert your 'HomeTeam' column into a Python list
list_HomeTeam = list(df['HomeTeam'])
print(list_HomeTeam)

# create an empty list to capture the index position of matches in 'HomeTeam'
list_results_in_home = []

# loop through each team in the 'AwayTeam column'
for each_team in df['AwayTeam']:

    # if you find a match in the list, store index as a result
    try:
        result = list_HomeTeam.index(each_team)

    # if you don't find a match, store a string
    except:
        result = 'team not in list'

    # add the result to the list that is capturing the index position in 'HomeTeam'
    list_results_in_home.append(result)

print(list_index_home)

# add column to dataframe with the index position
df['index_match_in_HomeTeam'] = list_results_in_home

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