2016-07-25 6 views
0

Ich habe eine Reihe von Datenzeilen in einem Pandas DF, die inkonsistent versetzende Zeichen enthalten. Für jede Spiel-ID (eine andere Spalte) sind die zwei Zeichenfolgen für diese Spiel-ID eindeutig, schalten jedoch nicht in einem vorhersagbaren Muster aus. Unabhängig davon versuche ich eine Hilfsfunktion zu schreiben, die jede eindeutige Spiel-ID nimmt und die beiden Team-Namen erhält.Strings in Pandas DF wiederholen - wollen eine Liste eindeutiger Strings zurückgeben

Zum Beispiel ...

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

Hier ist mein jämmerlicher Versuch, der nicht funktioniert.

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

Ich möchte es [ 'ATL', zurückzukehren 'DET] für Game ID 400827888 und [' POR‘, 'DEN'] für Game ID 400829117. Stattdessen es kehrt nur den Teamnamen mit jedem Index verbunden.

Antwort

2

können Sie verwenden SeriesGroupBy.unique:

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

Für iterrows Verwendung Looping:

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

EDIT:

Wenn die Notwendigkeit, alle game_id durch eine Zeichenfolge finden (zB DET) verwenden boolean indexing:

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

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

Danke dafür. Was ist der beste Weg, um die zweite Spalte der Teamlisten zu durchlaufen? Ich habe die groupby auf eine neue Variable initialisiert, kann aber die Spalte aus dieser Variablen nicht aufrufen. – BSHuniversity

+0

def get_teams (df, Team): für game_id in df [ 'GameID'.]: both_teams = df.groupby ('GameID') [ 'Team'] einzigartig() team_games = [] für Zeile in both_teams : wenn team in row [1]: team_games.append (game_id) Scheint aus irgendeinem Grund eine Endlosschleife zu sein. – BSHuniversity

+0

Sorry, brauchst du 'für g in df.groupby ('game_id') ['team']. Unique(): drucken (g)'? – jezrael