2016-07-25 2 views
0

У меня есть группа строк данных в pandas DF, которые содержат несогласованно компенсирующие строковые символы. Для каждого ИД игры (другой столбец) два строковых символа уникальны для этого Идентификатора игры, но не выключаются в предикативном шаблоне. Независимо от того, я пытаюсь написать вспомогательную функцию, которая принимает каждый уникальный идентификатор игры и получает имена двух команд, связанных с ним.Повторяющиеся строки в pandas DF - хотите вернуть список уникальных строк

Например ...

index game_id 0 400827888 1 400827888 2 400827888 3 400827888 4 400827888 ... 555622 400829117 555623 400829117 555624 400829117 555625 400829117

index team 0 ATL 1 DET 2 ATL 3 DET 4 ATL ... 555622 POR 555623 DEN 555624 POR 555625 POR

Вот мой горестный попытка, которая не работает.

def get_teams(df): 
    for i in df['gameid']: 
     both_teams = [df['team'].astype(str)] 
     return(both_teams) 

Я хотел бы, чтобы вернуться [ 'ATL', 'DET] для игры ID 400827888 и [' POR», 'DEN'] для игры ID 400829117. Вместо этого он просто возвращается имя команды связанных с каждым индексом.

ответ

2

Вы можете использовать SeriesGroupBy.unique:

print (df.groupby('game_id')['team'].unique()) 
game_id 
400827888 [ATL, DET] 
400829117 [POR, DEN] 
Name: team, dtype: object 

Для цикла использования iterrows:

for i, g in df.groupby('game_id')['team'].unique().reset_index().iterrows(): 
    print (g.game_id) 
    print (g.team) 

EDIT:

Если нужно найти все game_id по некоторой строке (например DET) использовать boolean indexing:

s = df.groupby('game_id')['team'].unique() 

print (s[s.apply(lambda x: 'DET' in x)].index.tolist()) 
[400827888] 
+0

Спасибо за это. Каков наилучший способ повторить этот второй столбец списков команд? Я инициализировал groupby новой переменной, но не могу вызвать столбец из этой переменной. – BSHuniversity

+0

Защиту get_teams (DF, команда): для game_id в ф.р. [ 'GameID']:. both_teams = df.groupby ('GameID') [ 'команда'] (уникальные) team_games = [] для строки в both_teams : если команда в ряду [1]: team_games.append (game_id) По какой-то причине кажется бесконечным циклом. – BSHuniversity

+0

Извините, вам нужно 'for g в df.groupby ('game_id') ['team']. Unique(): print (g)'? – jezrael

Смежные вопросы