2016-08-04 180 views
0

我有一個pd.DataFrame,看起來像這樣:GROUPBY與大熊貓條件

In [30]: df 
Out[30]: 
     DATES UID  A 
0 2014-01-01 1 False 
1 2014-01-02 2 False 
2 2014-01-03 3 True 
3 2014-01-04 4 True 
4 2014-01-05 5 False 
5 2014-01-06 6 True 
6 2014-01-07 1 False 
7 2014-01-08 2 False 
8 2014-01-09 3 False 
9 2014-01-10 2 False 
10 2014-01-11 3 False 
11 2014-01-12 4 False 
12 2014-01-13 5 False 
13 2014-01-14 3 False 
14 2014-01-15 1 False 

,我想找到一種方法:

  1. 訂單按日期ASC
  2. 集團通過UID
  3. 過濾掉第一個條目(每個UID)具有'A'的所有UID == False

所需的輸出應該是這樣的:

In [30]: df 
Out[30]: 
    DATES UID  A 
0 2014-01-03 3 True 
1 2014-01-04 4 True 
2 2014-01-06 6 True 
3 2014-01-09 3 False 
4 2014-01-11 3 False 
5 2014-01-12 4 False 
6 2014-01-14 3 False 

任何想法非常感謝,謝謝!

+0

你能告訴你的努力,比如你有沒有試過['groupby'](http://pandas.pydata.org/pandas-docs /stable/groupby.html)? – EdChum

+0

是的,我用'groupby'這樣試過:在[31]:df123 = df.sort_values(by ='DATES')。groupby('UID') In [32]:df123 Out [32 ]:並且它是一個創建的對象,不知道如何過濾出正確的條目。 – Thanos

+0

請編輯您的問題與您的嘗試 – EdChum

回答

1

它看起來像需要先sort_values然後filter

df.sort_values(by='DATES', inplace=True) 
df = df.groupby('UID', sort=False).filter(lambda x: x.A.iloc[0] == True) 
print (df) 
     DATES UID  A 
2 2014-01-03 3 True 
3 2014-01-04 4 True 
5 2014-01-06 6 True 
8 2014-01-09 3 False 
10 2014-01-11 3 False 
11 2014-01-12 4 False 
13 2014-01-14 3 False 
+0

有助於瞭解如何過濾每個組的第一個值,謝謝! – Thanos

+0

謝謝你的接受!美好的一天! – jezrael