DataFrameGroupBy的整个组的条件筛选器

时间:2017-05-24 16:44:15

标签: pandas

如果我有以下数据

>>> data = pd.DataFrame({'day': [1, 1, 1, 1, 2, 2, 2, 2, 3, 4], 
'hour':[4, 5, 6, 7, 4, 5, 6, 7, 4, 7]})
>>> data
   day  hour
0    1     4
1    1     5
2    1     6
3    1     7
4    2     4
5    2     5
6    2     6
7    2     7
8    3     4
9    4     7

我想只保留hour有4个唯一值的日子,然后我会想做这样的事情

>>> data.groupby('day').apply(lambda x: x[x['hour'].nunique() == 4])

但这会返回KeyError: True

我希望得到这个

>>> data
   day  hour
0    1     4
1    1     5
2    1     6
3    1     7
4    2     4
5    2     5
6    2     6
7    2     7

我们在哪里看到过滤了day == 3day == 4的位置,因为按天分组时,它们没有hour的4个唯一值。我正在大规模地这样做,所以简单地过滤(day == 3) & (day == 4)不是一个选项。我认为分组是一种很好的方法,但不能让它发挥作用。任何人都有将功能应用到DataFrameGroupBy的经验吗?

1 个答案:

答案 0 :(得分:3)

我认为你确实需要filter数据:

>>> data.groupby('day').filter(lambda x: x['hour'].nunique() == 4)
   day  hour
0    1     4
1    1     5
2    1     6
3    1     7
4    2     4
5    2     5
6    2     6
7    2     7