熊猫groupby对每个组值进行排序,并根据每个组的最大值对数据框组进行排序

Barathvutukuri

我有一个包含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因为在第二个DataFrame中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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章