按大小对组进行排序并删除较小的组

问题描述 投票:0回答:1

我想对一些数据进行分组,并且:

  1. 按大小对组进行排序
  2. 减少3组以下的尺寸。

在下面的示例中,我希望获得顺序为

z
y
的组,因为
z
的大小为 4,而
y
的大小为 3。但是删除
x
,因为它的大小为 2。

import pandas as pd

data = [
    ['x', 1],
    ['y', 5],
    ['z', 1],
    ['x',43],
    ['y', 22],
    ['z', 2],
    ['y', 31],
    ['z', 3],
    ['z', 4],
    
]
df = pd.DataFrame(data, columns=['name', 'value'])
print(df)
dfg = df.groupby('name')
for name,df in dfg:
    print(name)
    print(df)

电流输出:

  name  value
0    x      1
1    y      5
2    z      1
3    x     43
4    y     22
5    z      2
6    y     31
7    z      3
8    z      4
x
  name  value
0    x      1
3    x     43
y
  name  value
1    y      5
4    y     22
6    y     31
z
  name  value
2    z      1
5    z      2
7    z      3
8    z      4

预计:

  name  value
2    z      1
5    z      2
7    z      3
8    z      4
  name  value
1    y      5
4    y     22
6    y     31
z
pandas
1个回答
0
投票

一个可能的解决方案:

g = df.groupby('name')
[x for _, x in g if len(x) >= 3]

输出:

[  name  value
 1    y      5
 4    y     22
 6    y     31,
   name  value
 2    z      1
 5    z      2
 7    z      3
 8    z      4]

如果您希望结果组按大小排序:

g = df.groupby('name')
sorted([x for _, x in g if len(x) >= 3], key=lambda y: -len(y))
© www.soinside.com 2019 - 2024. All rights reserved.