如果我有以下数据
>>> 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 == 3
和day == 4
的位置,因为按天分组时,它们没有hour
的4个唯一值。我正在大规模地这样做,所以简单地过滤(day == 3) & (day == 4)
不是一个选项。我认为分组是一种很好的方法,但不能让它发挥作用。任何人都有将功能应用到DataFrameGroupBy
的经验吗?
答案 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