2016-05-26 6 views
1

の唯一の特定のチェーンにデータフレームを減らすには、私はこのデータを持っていると仮定しますパンダ:発生箇所​​

>>> data = {'event': [0,1,1,2,1,0], 
...   'val1': [1, 2, 3, 4, 5, 6] 
...   } 
>>> df1 = pd.DataFrame(data, index = ['hash1', 'hash1', 'hash2', 
             'hash3', 'hash3', 'hash3']) 
>>> df1 
     event val1 
hash1  0  1 
hash1  1  2 
hash2  1  3 
hash3  2  4 
hash3  1  5 
hash3  0  6 

私が何をしたい: 私は私だけ持っているそれらのハッシュに関するデータを表示するDFを減らしたいです少なくとも1つの発生がすべてイベントの一意の値。

ので、最後に、私はデータフレームは、このように見てになるだろう:

 event val1 
hash3  2  4 
hash3  1  5 
hash3  0  6 

私はゼロにゼロに等しい対大きめのいずれかのイベントにデータフレームを分割しようとしたし、その後のインデックスを見上げてみました「0に等しくない」データフレームの「ゼロに等しい」データフレーム - しかし、私はパンダには本当に悪いです。もし誰かがこれを達成するのを助けることができたら、私はとても感謝しています。 先生にありがとう!

答えて

1

あなたがインデックスに前groupbyにDFをフィルタリングして、nuniqueを使用してユニークなイベントの数を取得し、単一のユニークなエントリが複数あるハッシュの原点復帰DFをフィルタリングすることができます。

In [62]: 
gp = df1[df1['event'] !=0].groupby(level=0)['event'].nunique() 
df1.loc[gp[gp> 1].index] 

Out[62]: 
     event val1 
hash3  2  4 
hash3  1  5 
hash3  0  6 

破壊上記ダウン:

In [63]: 
df1['event'] !=0 

Out[63]: 
hash1 False 
hash1  True 
hash2  True 
hash3  True 
hash3  True 
hash3 False 
Name: event, dtype: bool 

In [64]: 
df1[df1['event'] !=0] 

Out[64]: 
     event val1 
hash1  1  2 
hash2  1  3 
hash3  2  4 
hash3  1  5 

In [65]: 
df1[df1['event'] !=0].groupby(level=0)['event'].nunique() 

Out[65]: 
hash1 1 
hash2 1 
hash3 2 
Name: event, dtype: int64 

In [66]: 
gp[gp> 1] 

Out[66]: 
hash3 2 
Name: event, dtype: int64 

EDIT

あなたのUPDに基づいてあなたがイベントのunique値の長さに対するnunique値の長さを比較することができます食べた:

In [107]: 
df1.loc[df1.groupby(level=0)['event'].nunique() == len(df1['event'].unique())] 

Out[107]: 
     event val1 
hash3  2  4 
hash3  1  5 
hash3  0  6 
+0

は、私が実際に最後の部分だけ df1.loc [GP [GP> 1] .INDEXを必要とした、ありがとうございました] これは、他のデータフレームから索引を検索する方法を理解するのに役立ちました。 – Mustafa

+0

ああ、申し訳ありません - 100%正確ではないことが分かりました。この解決法は、少なくとも1つ以上のユニークな出現を持つ索引のサブセットを私に提供しますが、「イベント」にはすべてユニークな出現を持つ索引のサブセットが必要でした。 – Mustafa

+1

あなたの質問を編集してください、あなたの要件を明確に述べていないのは面倒です – EdChum

関連する問題