Python:删除每个组中具有最大值的行
我有一个熊猫数据帧Python:删除每个组中具有最大值的行,python,pandas,dataframe,indexing,pandas-groupby,Python,Pandas,Dataframe,Indexing,Pandas Groupby,我有一个熊猫数据帧df像这样 In [1]: df Out[1]: country count 0 Japan 78 1 Japan 80 2 USA 45 3 France 34 4 France 90 5 UK 45 6 UK 34 7 China 32
df
像这样
In [1]: df
Out[1]:
country count
0 Japan 78
1 Japan 80
2 USA 45
3 France 34
4 France 90
5 UK 45
6 UK 34
7 China 32
8 China 87
9 Russia 20
10 Russia 67
我想删除每组中具有最大值的行。因此,结果应该如下所示:
country count
0 Japan 78
3 France 34
6 UK 34
7 China 32
9 Russia 20
我的第一次尝试:
idx = df.groupby(['country'], sort=False).max()['count'].index
df_new = df.drop(list(idx))
我的第二次尝试:
idx = df.groupby(['country'])['count'].transform(max).index
df_new = df.drop(list(idx))
但它不起作用。有什么想法吗?groupby/transform('max'))
您可以首先按组计算一系列最大值。然后筛选出计数等于该序列的实例。注意,这也将最大限度地删除重复项
g = df.groupby(['country'])['count'].transform('max')
df = df[~(df['count'] == g)]
系列g
表示各组每行的最大值。如果这等于df['count']
(按索引),则您有一行,其中您的组有最大值。然后使用~
表示否定条件
print(df.groupby(['country'])['count'].transform('max'))
0 80
1 80
2 45
3 90
4 90
5 45
6 45
7 87
8 87
9 20
Name: count, dtype: int64
排序+删除
或者,您可以对最终引用进行排序和删除:
res = df.sort_values('count')
res = res.drop(res.groupby('country').tail(1).index)
print(res)
country count
9 Russia 20
7 China 32
3 France 34
6 UK 34
0 Japan 78