2016-09-19 2 views
3

私は1つのデータフレームを持っています。一度に4列のパンダのデータフレームを比較するにはどうすればいいですか?

DATAFRAME:

Symbol1 BB Symbol2 CC 
0   ABC 1 ABC  1 
1   PQR 1 PQR  1 
2   CPC 2 CPC  0 
3   CPC 2 CPC  1 
4   CPC 2 CPC  2 

私は、彼らが同じであるならば、私は、行のみ、他の行はデータフレームから除去されなければならないことをしたい、CCSymbol2BBSymbol1を比較したいです。

期待される結果:

Symbol1 BB Symbol2 CC 
0   ABC 1 ABC  1 
1   PQR 1 PQR  1 
2   CPC 2 CPC  2 

二列間の比較は、その後、私が使用している場合は:

df = df[df['BB'] == '2'].copy() 

それは正常に動作します。

df = df[df['BB'] == df['offset'] and df['Symbol1'] == df['Symbol2']].copy() 

エラーが発生しています。

エラー:私は比較し、期待される結果を取得できますか

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

+4

あなたのエラーを表示してください、 'と'の代わりに '&'(かっこ)を使うべきです。 – IanS

答えて

6

あなたはboolean indexingを使用し、代わりに&andを比較することができます

print ((df.Symbol1 == df.Symbol2) & (df.BB == df.CC)) 
0  True 
1  True 
2 False 
3 False 
4  True 
dtype: bool 

print (df[(df.Symbol1 == df.Symbol2) & (df.BB == df.CC)]) 
    Symbol1 BB Symbol2 CC 
0  ABC 1  ABC 1 
1  PQR 1  PQR 1 
4  CPC 2  CPC 2 
+0

ありがとうございます。私は&とブールインデックスについて知りませんでした。 – kit

+0

私の答えや他の答えが役に立ったら、それを忘れないでください。ありがとう。 – jezrael

3

ここで少し進歩して別の方法は、ですが、それはまた、より遅いビットです:

In [65]: df.query('Symbol1 == Symbol2 and BB == CC') 
Out[65]: 
    Symbol1 BB Symbol2 CC 
0  ABC 1  ABC 1 
1  PQR 1  PQR 1 
4  CPC 2  CPC 2 
+0

これはまた、列を比較するのにも良い方法です。ありがとう。 – kit

関連する問題