У меня есть файл 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", "-")
Вы можете сортировать по 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 человека с бронзовым типом члена, можем ли мы рассматривать родительские отношения, как указано выше? Я только что немного обновил свой образец, если это не имеет значения.