Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:删除每个组中具有最大值的行_Python_Pandas_Dataframe_Indexing_Pandas Groupby - Fatal编程技术网

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