2016-08-04 178 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