使用groupby和head(有条件地)过滤DataFrame

问题描述 投票:0回答:1

我想使用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()。任何的想法?

python pandas dataframe
1个回答
0
投票

通过使用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
© www.soinside.com 2019 - 2024. All rights reserved.