2016-08-08 3 views
2

各エントリは順序である私はpd.DataFrameGroupbyとany()|すべての()

In [155]: df1 
Out[155]: 
    ORDER_ID ACQ  DATE UID 
2   3 False 2014-01-03 1 
3   4 True 2014-01-04 2 
4   5 False 2014-01-05 3 
6   7 True 2014-01-08 5 
7   8 False 2014-01-08 5 
9  10 False 2014-01-10 6 
0  11 False 2014-01-11 6 

以下、ORDER_IDDATEUIDACQの値を有する(これはデータセットに関連UIDための一次であるかどうかを示す)を有します。

データセットに記載されている期間内に最初の注文を行ったユーザー(つまり、そのようなユーザーの注文の少なくとも1つがACQ == Trueを満たしている)によってフィルタされ、すべての注文を保持しようとしています。

ので、所望の出力は次のようになります。

ORDER_ID ACQ  DATE UID 
3   4 True 2014-01-04 2 
6   7 True 2014-01-08 5 
7   8 False 2014-01-08 5 

と私がすることによってこれを達するために管理している:私は、ユーザーが置かれたすべての注文を見つけるためにしようとすると、しかし

In [156]: df1.groupby('UID').filter(lambda x: x.ACQ.any() == True) 
Out[156]: 
    ORDER_ID ACQ  DATE UID 
3   4 True 2014-01-04 2 
6   7 True 2014-01-08 5 
7   8 False 2014-01-08 5 

データセットでカバーされている時間外に最初の注文をした(つまり、すべての注文がACQ == Falseを満たすはずです)私は失われているようです。私はこれを試してみました:

In [159]: df1.groupby('UID').filter(lambda x: x.ACQ.all() == False) 
Out[159]: 
    ORDER_ID ACQ  DATE UID 
2   3 False 2014-01-03 1 
4   5 False 2014-01-05 3 
6   7 True 2014-01-08 5 ## <- This order is an acquisition, therefore all orders with UID == 5 should be filtered out. 
7   8 False 2014-01-08 5 
9  10 False 2014-01-10 6 
0  11 False 2014-01-11 6 

は、どのように私はすべての彼らの受注はACQ == Falseを満たしているユーザーによってすべての注文をフィルタリングについては行くべき?

アイデアは大変ありがとうございます。

答えて

1

あなたが最初の使用条件を必要とし、その後allを追加します。

print (df1.groupby('UID').filter(lambda x: (x.ACQ == False).all())) 
    ORDER_ID ACQ  DATE UID 
2   3 False 2014-01-03 1 
4   5 False 2014-01-05 3 
9  10 False 2014-01-10 6 
0  11 False 2014-01-11 6 
+0

、先端に感謝役立ちました! – Thanos

関連する問題