我想使用pandas groupby
过滤此数据框并有条件地进行头部过滤。这是一个例子DataFrame
:
df = pd.DataFrame([['Yes', 2], ['Yes', 4], ['Yes', 6], ['No', 8], ['No', 5],
['No', 6], ['No', 3], ['Maybe', 10], ['Maybe', 2],
['Maybe', 7]], columns=['A', 'B'])
过滤行的数量可以变化,但始终应该是偶数(每个组的最大偶数行数)。这应该是结果DataFrame
:
A B
0 Yes 2
1 Yes 4
2 No 8
3 No 5
4 No 6
5 No 3
6 Maybe 10
7 Maybe 2
我不知道如何正确使用df.groupby.head()
。任何的想法?
通过使用floor
df.groupby('A').B.apply(lambda x : x.iloc[:int(np.floor(len(x)/2)*2)]).reset_index().sort_values('level_1').drop('level_1',1)
Out[1458]:
A B
6 Yes 2
7 Yes 4
2 No 8
3 No 5
4 No 6
5 No 3
0 Maybe 10
1 Maybe 2