2017-02-17 5 views
0

だから私はこのようなものに見える大きなパンダのデータフレーム(エクセル)を持っている:繰り返しインデックス値を持つPandasデータフレームのセルをdf.locする方法はありますか?

Teams  Season  Points 
Team A  1   5 
Team B  1   6 
Team C  1   4 
Team D  1   5 
Team A  2   7 
Team B  2   8 
Team C  2   3 
Team D  2   2 

あなたはすべてのチームがインデックスに繰り返していることがわかります。私の質問は、このシートの特定のセルに "loc"することができる方法です。

df.loc ["チームA"、 "ポイント"]を実行すると、両方のチームAの値が出力されます。どのチームを使用したいのですか(シーズン1または2)を指定する方法はありますか? DataFrame.query

答えて

1

ソリューション:別の可能な解決策がMultiIndex作成され

#unutbu solution from deleted answer 
print (df.query('Teams=="Team A" & Season==1')['Points'].item()) 
5 

print (df.query('Teams=="Team A" & Season==1')['Points'][0]) 
5 
print (df.query('Teams=="Team A" & Season==1')['Points'].values[0]) 
5 

からset_indexによってindexに列Seasonを追加し、選択します。スカラー出力が必要な場合

print (df.query('Teams=="Team A" and Season==1')['Points']) 
Teams 
Team A 5 
Name: Points, dtype: int64 

print (df.query('Teams=="Team A" & Season==1')['Points']) 
Teams 
Team A 5 
Name: Points, dtype: int64 

df = df.set_index('Season', append=True) 
print (df) 
       Points 
Teams Season   
Team A 1   5 
Team B 1   6 
Team C 1   4 
Team D 1   5 
Team A 2   7 
Team B 2   8 
Team C 2   3 
Team D 2   2 

print (df.loc[('Team A',1)]) 
Points 5 
Name: (Team A, 1), dtype: int64 
+0

ありがとう、マルチインデックスは私が信じる必要があるものです。しかし、もし私がポイント以外のカラムをさらに持っていて、どのカラムを引き出すのかを指定したいのですが?例えば、私が試した: 'プリント(df.loc([(player_or_team_name、rand_season)]、[stat_name]))' IはTypeError例外を取得:__callは__()Iは1から2つの位置の引数を取るが、図3に示すように を与えられました私はちょうどフォーマット、括弧/括弧を場所の外に持っているかもしれないと思いますか? –

+0

df.queryは値のない空の系列を返します。 : 'Series([]、Name:Caps、dtype:object)' –

+0

マルチインデックスを選択するには、ドキュメント(http://pandas.pydata.org/pandas-docs/stable/advanced.html#using-slicers)を確認できます。 – jezrael

関連する問題