Поиск отношений между участниками с Pandas

У меня есть файл CSV с более чем 10 000 000 строк данных со структурой ниже:

У меня есть TeamID в качестве моего уникального кода, в каждом TeamID могут существовать 2 члена (Кевин, Смит) или 3 члена (Кевин, Джон, Смит).

Data Format
TeamID      Members     MemberType
Team1       Kevin       Gold
Team1       John        Silver
Team1       Smith       Bronze
Team2       Kevin       Gold
Team2       Smith       Bronze
Team3       Kevin       Gold
Team3       Smith       Bronze
...

Как вы видите выше, в некоторых командах Джон существует, а в некоторых других строках не существует, но Кевин и Смит всегда доступны во всех командах. Для определения отношений Кевин всегда является родителем Джона, а Джон всегда является родителем Смита, но если Джона не существует, Кевин будет родителем Смита:

TeamID      Members     MemberType  Parent
Team1       John        Silver      Kevin
Team1       Smith       Bronze      John
Team2       Smith       Bronze      Kevin
Team3       Smith       Bronze      Kevin
...

С этим кодом ниже Кевин всегда является Родителем, и я не считаю Джона, я хочу знать, есть ли способ рассмотреть это с указанным выше условием:

df["Parent"] = np.where(df["Members"].isin(['Kevin','John','Smith']), "Kevin", "-")
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете сортировать по MemberType, перемещаться по группам и присоединяться:

order = ['Gold', 'Silver', 'Bronze']
key = pd.Series({x: i for i,x in enumerate(order)})

df2 = df.sort_values(by='MemberType', key=key.get)

df.join(df2.groupby('TeamID')['Members'].shift().dropna().rename('Parent'),
        how='right')

выход:

  TeamID Members MemberType Parent
1  Team1    John     Silver  Kevin
2  Team1   Smith     Bronze   John
4  Team2   Smith     Bronze  Kevin
6  Team3   Smith     Bronze  Kevin

Спасибо, это отлично работает, я применил код. Единственный вопрос, если существует более 1 человека с бронзовым типом члена, можем ли мы рассматривать родительские отношения, как указано выше? Я только что немного обновил свой образец, если это не имеет значения.

BrainGain 17.05.2022 14:33

Логика другая, может это отдельный вопрос?

mozway 17.05.2022 14:38

Конечно подниму. и откатить мой вопрос. Большое спасибо

BrainGain 17.05.2022 14:39

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