2017-04-06 30 views
1

私はレース結果のデータフレームを持っており、レースの勝者がレースと同じ場所にいるかどうかを確認しようとしています。パンダ - Series.isinを動作させることができません

round_locコラム:

0      Val d'Allos, France 
168     Les Deux Alpes, France 
378     Winter Park, CO, USA 
499     Whistler, BC, Canada 
... 

国のコラム:

0    France 
168   France 
378   France 
499   Australia 
602   France 
... 

マイコード:

winners_df = df.loc[df['finish_position'] == 1, ['country', 'round_loc']] 
hometown_win = winners_df['country'].isin(winners_df['round_loc']) 

# Also tried 

hometown_win = winners_df['country'].isin(winners_df['round_loc'].values) 

print(hometown_win) 

マイ結果:

0  False 
168  False 
378  False 
499  False 
602  False 
... 

私が間違っていることがわかりません。

winners_df['country'][0] in winners_df['round_loc'][0] 

正常に動作します。私はループでそれをやることができると確信していますが、私はここに何かを見逃しているように感じます。

+3

これは 'isin'が完全一致を探している場合には、各行を比較し、' contains'を使ってメンバーシップ/マッチをテストします。 – EdChum

答えて

1
print (winners_df) 
        round_loc country 
0  Val d'Allos, France  France 
168 Les Deux Alpes, France  USA <-changed data sample 
378 Winter Park, CO, USA  France 
499 Whistler, BC, Canada Australia 

カラムround_locの列countryから1つの値であるかどうかをチェックが必要な場合:

a = '|'.join(winners_df['country'].unique().tolist()) 
print (a) 
France|USA|Australia 

hometown_win = winners_df['round_loc'].str.contains(a) 
print(hometown_win) 
0  True 
168  True 
378  True 
499 False 
Name: round_loc, dtype: bool 

カラムround_locではなく、行ごとに、列countryから1つの値であるかどうかをチェックが必要な場合:

hometown_win = winners_df.apply(lambda x: x['country'] in x['round_loc'],axis=1) 
print(hometown_win) 
0  True 
168 False 
378 False 
499 False 
dtype: bool 
+0

Ahhhそれは意味をなさない。フランス(国)の誰かが勝利していないレースが各列にレーサーが含まれている場合は、ここに問題があるように見えます(round_loc)。 – moto

+0

はい、正確です。私の答えが役に立ったら、[受諾](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 – jezrael

+0

これは完璧です!ありがとうございました!私はあなたがそのような軸上のすべてのアイテムをチェックできるかどうかはわかりませんでした! – moto

関連する問題