2016-07-25 10 views
0

pandas DFに一貫性のない文字列を含むデータ行がたくさんあります。各ゲームID(別の列)について、2つの文字列キャラクタは、そのゲームIDに固有であるが、予見可能なパターンでは消灯しない。それにもかかわらず、私はそれぞれ固有のゲームIDを取得し、それに関連する2つのチーム名を取得するヘルパー関数を作成しようとしています。例えばパンダで文字列を繰り返す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) 

私はそれがゲームID 400829117.代わりのための '[「、 'POR DEN' を]ゲームID 400827888とは[DET 'ATL' を、]' を返したいのですが、それだけでチーム名を返します各インデックスに関連付けられています。

あなたが SeriesGroupBy.uniqueを使用することができます

答えて

2

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(例えばDETboolean indexingを使用を見つける必要がある場合

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

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

ありがとうございます。その2番目のチームリストの列を反復する最良の方法は何ですか?私はgroupbyを新しい変数に初期化しましたが、その変数から列を呼び出すことはできません。 – BSHuniversity

+0

DEF get_teams(DF、チーム):DFでgame_idため [ 'gameid']: both_teams = df.groupby( 'gameid')[ 'チーム']ユニーク() team_games = both_teamsにおける行の[] : チームイン行[1]: team_games.append(game_id) 何らかの理由で無限ループに見えます。 – BSHuniversity

+0

申し訳ございませんが、df.groupby( 'game_id')['team']のgには 'が必要ですか?(: print(g)'? – jezrael

関連する問題