2016-10-17 9 views
1

私が取り組んでいるデータの例です。 (パンダのDFとして)Python Pandas - グループ内のユニークな値の数でdfをフィルタリングする

index inv Rev_stream Bill_type Net_rev 
     1 1 A   Original -24.77 
     2 1 B   Original -24.77 
     3 2 A   Original -409.33 
     4 2 B   Original -409.33 
     5 2 C   Original -409.33 
     6 2 D   Original -409.33 
     7 3 A   Original -843.11 
     8 3 A   Rebill  279.5 
     9 3 B   Original -843.11 
     10 4 A   Rebill  279.5 
     11 4 B   Original -843.11 
     12 5 B   Rebill  279.5 

は、どのように私は、請求書/ Rev_streamコンボがオリジナルとNet_revの種類を再請求の両方を持っている行を取得する方法には、このDFをフィルタリングすることができます。上記の例では、インデックス7と8の行のみです。

データフレーム全体を反復せずに、請求書+ RevStreamの辞書を構築することなく簡単に行うことができますか?Bill_type?

私が探している残念ながら、上記のコードは動作しません

df = df[df[['inv','Rev_stream']]['Bill_type'].unique().len() == 2] 

のいくつかの種類です。

ありがとうございます。

答えて

2

両方OriginalRebillが条件に基づいてBill_type値とフィルタである場合は、グループinvRev_stream列によってあなたのデータは、その後、グループごとに確認することができます。

(df.groupby(['inv', 'Rev_stream']) 
    .filter(lambda g: 'Original' in g.Bill_type.values and 'Rebill' in g.Bill_type.values)) 

enter image description here

+0

多くのおかげで!私の平均データセット(約500k行)にはしばらく時間がかかりますが、それは魅力のように機能します! – Greg

関連する問題