Mak*_*aki 2 python indexing dataframe pandas 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
8 China 87
9 Russia 20
10 Russia 67
Run Code Online (Sandbox Code Playgroud)
我想删除每组中具有最大值的行.所以结果应该是这样的:
country count
0 Japan 78
3 France 34
6 UK 34
7 China 32
9 Russia 20
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试:
idx = df.groupby(['country'], sort=False).max()['count'].index
df_new = df.drop(list(idx))
Run Code Online (Sandbox Code Playgroud)
我的第二次尝试:
idx = df.groupby(['country'])['count'].transform(max).index
df_new = df.drop(list(idx))
Run Code Online (Sandbox Code Playgroud)
但它没有用.有任何想法吗?
您可以先按组计算一系列最大值.然后过滤掉count等于该系列的实例.请注意,这也将删除重复的最大值.
g = df.groupby(['country'])['count'].transform('max')
df = df[~(df['count'] == g)]
Run Code Online (Sandbox Code Playgroud)
该系列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
Run Code Online (Sandbox Code Playgroud)
或者,您可以对最终事件进行排序和删除:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
948 次 |
| 最近记录: |