熊猫分组依据 对每个组的值进行排序,并根据每个组的最大值对数据帧组进行排序



我有一个包含 3 列的数据集,我正在尝试将它们分组并以排序方式打印每个组(基于每个组中的最大值(。每个组中的记录也必须按排序方式排列。

数据集如下所示。

key1,key2,val
b,y,21
c,y,25
c,z,10
b,x,20
b,z,5
c,x,17
a,x,15
a,y,18
a,z,100
df=pd.read_csv('/tmp/hello.csv')
df['max'] = df.groupby(['key1'])['val'].transform('max')
dff=df.sort_values(['max', 'val'], ascending=False).drop('max', axis=1)

我正在应用转换,因为它按组工作,然后对值进行排序。

上面的代码会产生我想要的数据帧:

a,z,100
a,y,18
a,x,15
c,y,25
c,x,17
c,z,10
b,y,21
b,x,20
b,z,5

但是,对于以下数据集,相同的代码失败。

key1,key2,val
b,y,10
c,y,10
c,z,10
b,x,2
b,z,2
c,x,2
a,x,2
a,y,2
a,z,2

以下是所需的输出

key1,key2,val
c,y,10
c,z,10
c,x,2
b,y,10
b,x,2
b,z,2
a,x,2
a,y,2
a,z,2

请帮助我为我的方案正确分组和排序数据帧。

将列key1添加到sort_values,因为在第二个数据帧中,每个组10多个最大值,因此排序不能分散组:

df['max'] = df.groupby(['key1'])['val'].transform('max')
dff=df.sort_values(['max','key1', 'val'], ascending=False).drop('max', axis=1)
print (dff)
key1 key2  val
8    a    z  100
7    a    y   18
6    a    x   15
1    c    y   25
5    c    x   17
2    c    z   10
0    b    y   21
3    b    x   20
4    b    z    5
df['max'] = df.groupby(['key1'])['val'].transform('max')
dff=df.sort_values(['max','key1', 'val'], ascending=False).drop('max', axis=1)
print (dff)
key1 key2  val
1    c    y   10
2    c    z   10
5    c    x    2
0    b    y   10
3    b    x    2
4    b    z    2
6    a    x    2
7    a    y    2
8    a    z    2

最新更新