2017-01-19 12 views
1

私はパンダのデータフレーム上のシリーズを検索しているここにコードがあります。Python Pandasデータフレームの検索

    df[(df['SlyWeekofFiscalYear']==wk) & 
         (df['IB']==bnd) & 
         (df['slyfiscalyear']==yr)] 
        ['Wholesale'].sum() 

これは、kwargを渡す関数です。bnd=Noneです。 bnd=Noneの場合、2行目のコードを無視する方法はありますか?

現在、私は長いif文を持っていますが、可能であれば、コードを整理したいと思います。

答えて

1

bnd=Noneの場合は、2行目を常にtrueと置き換えてみましたか?

Somelike:最初の条件が真である場合に、第2のブールベクトルは

((df['IB']==bnd) | (bnd is None)) 
+0

パーフェクト - 私はあなたの提案を使用しました。 シンプルだけど、それは私を逃した! – RichWolff

+1

これは常にtrueを返し、基本的に最初のステートメントを無視します。 –

+1

あなたは正しいです。私はすぐにそれを考え出した! – RichWolff

1

あなたは三元の文を試みることができる:

(df['IB'] == bnd if bnd is not None else True) 

スカラー値Trueが正しい長さのベクトルに適切に放送されなければなりません。

2

2行目を((bnd is None) | (df['IB'] == bnd))に変更することができます。 bndがNoneの場合、これはすべてtrueの系列を生成し、&の演算子を持つため、結果には影響しません。

+0

を評価されるのでしょうか? – IanS

+1

@IanS通常、 'or'や' and'と異なります。 '|'と '&'には短絡がありません。しかし、この瞬間にドキュメントを見つけることができません。 – Psidom

+1

それは私が疑ったものです。あなたの言葉は私のために十分です:) – IanS

関連する問題