首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对熊猫数据进行分组和排序的最佳方法是什么?

对熊猫数据进行分组和排序的最佳方法是什么?
EN

Stack Overflow用户
提问于 2017-07-21 12:16:37
回答 1查看 118关注 0票数 1

嗨,我有数据

代码语言:javascript
运行
复制
df_warnings

它捕获服务器日志中的警告,如下所示(前3行所示):

代码语言:javascript
运行
复制
URI code    method  tid type
date                    
2017-06-20  URI: /app/faces/pages/oversight/Oversight.jspx  ADFC-64001  oracle.adfinternal.controller.state.ControllerState tid: [ACTIVE].ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' WARNING
2017-06-20  URI: /app/faces/pages/oversight/Oversight.jspx  ADFC-64001  oracle.adfinternal.controller.state.ControllerState tid: [ACTIVE].ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' WARNING
2017-06-20  URI: /app/faces/pages/oversight/Oversight.jspx  ADFC-64001  oracle.adfinternal.controller.state.ControllerState tid: [ACTIVE].ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' WARNING

'code‘& 'method’列是字符串。我想做的是:

  • 将“方法”值按“代码”值分组(即,我希望看到方法和这些方法针对每个代码的计数)
  • 按降序将每个代码组内的每个方法的计数分组。
  • 按降序排列组(代码)
  • 仅显示每个代码组中的前3种方法&计数

做这件事最好的方法是什么?

编辑:我试过了

代码语言:javascript
运行
复制
df_warnings['method'].groupby(df_warnings['code']).value_counts()

它给出了由代码绑定的方法和方法计数;但是,它没有给出每个代码桶中的前3种方法和方法计数,而且代码桶中的代码桶没有按总计数的降序排列。

EDIT2:我想要输出

代码语言:javascript
运行
复制
code    method    count
code1   A         100
        B         50
        C         5
        D         2
code2   A         50
        B         10
code3   C         50
        D         5

在上面的code1中,code2和code3按每一组的总计数(分别为157、60和55 )进行排序,然后在每组中对方法和计数进行排序。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-21 13:07:01

我想你需要groupby + value_counts来计数,然后需要SeriesGroupBy.nlargest

代码语言:javascript
运行
复制
d = {'method': ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'D', 'D', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D'], 'code': ['code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3']}
df = pd.DataFrame(d)
代码语言:javascript
运行
复制
print (df.head())
    code method
0  code1      C
1  code1      C
2  code1      C
3  code1      C
4  code1      C


df2 = df.groupby(['code'])['method'].value_counts()
print (df2)
code   method
code1  C         100
       A          50
       B           5
       D           2
code2  C          50
       A          10
code3  C          50
       D           5
Name: method, dtype: int64

df2 = df.groupby(['code'])['method'].value_counts().sort_index()
print (df2)
code   method
code1  A          50
       B           5
       C         100
       D           2
code2  A          10
       C          50
code3  C          50
       D           5
Name: method, dtype: int64
代码语言:javascript
运行
复制
#in real data change 2 to 3
df2 = df2.groupby(level='code',group_keys=False ).nlargest(2)
print (df2)
code   method
code1  C         100
       A          50
code2  C          50
       A          10
code3  C          50
       D           5
Name: method, dtype: int64

编辑:

我试着用样本来解释sort_values (我认为this回答它更好,尽管它不是熊猫):

代码语言:javascript
运行
复制
d = {'method': ['C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B', 'D', 'D', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D'], 'code': ['code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code1', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code2', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3', 'code3']}
df = pd.DataFrame(d)
#print (df.head())
代码语言:javascript
运行
复制
df3 = df.groupby(['code'])['method'].value_counts().reset_index(name='vals')
#some random shuffle of rows
a = df3.index.values
np.random.seed(88)
np.random.shuffle(a)
df3 = df3.reindex(a).sort_index()
print (df3)
    code method  vals
0  code3      D     5
1  code2      A    10
2  code2      C    50
3  code1      A    50
4  code1      C   100
5  code1      B     5
6  code1      D     2
7  code3      C    50

print (df3.sort_values(['code']))
    code method  vals
3  code1      A    50
4  code1      C   100
5  code1      B     5
6  code1      D     2
1  code2      A    10
2  code2      C    50
0  code3      D     5
7  code3      C    50

print (df3.sort_values(['method']))
    code method  vals
1  code2      A    10
3  code1      A    50
5  code1      B     5
2  code2      C    50
4  code1      C   100
7  code3      C    50
0  code3      D     5
6  code1      D     2

print (df3.sort_values(['vals'], ascending=False))
    code method  vals
4  code1      C   100
2  code2      C    50
3  code1      A    50
7  code3      C    50
1  code2      A    10
0  code3      D     5
5  code1      B     5
6  code1      D     2

#if sorting by multiples columns it sort all columns separately:
#so first sort all values in df by first column, then sort by second and last by 3. col
print (df3.sort_values(['code','method']))
    code method  vals
3  code1      A    50
5  code1      B     5
4  code1      C   100
6  code1      D     2
1  code2      A    10
2  code2      C    50
7  code3      C    50
0  code3      D     5

print (df3.sort_values(['code','vals'], ascending=[True, False]))
    code method  vals
4  code1      C   100
3  code1      A    50
5  code1      B     5
6  code1      D     2
2  code2      C    50
1  code2      A    10
7  code3      C    50
0  code3      D     5

print (df3.sort_values(['method', 'vals'], ascending=[True, False]))
    code method  vals
3  code1      A    50
1  code2      A    10
5  code1      B     5
4  code1      C   100
2  code2      C    50
7  code3      C    50
0  code3      D     5
6  code1      D     2

print (df3.sort_values(['vals', 'method'], ascending=[False, True]))
    code method  vals
4  code1      C   100
3  code1      A    50
2  code2      C    50
7  code3      C    50
1  code2      A    10
5  code1      B     5
0  code3      D     5
6  code1      D     2

print (df3.sort_values(['vals', 'method', 'code'], ascending=[True, False, False]))
    code method  vals
6  code1      D     2
0  code3      D     5
5  code1      B     5
1  code2      A    10
7  code3      C    50
2  code2      C    50
3  code1      A    50
4  code1      C   100

print (df3.sort_values(['code', 'method', 'vals'], ascending=[True, False, True]))
    code method  vals
6  code1      D     2
4  code1      C   100
5  code1      B     5
3  code1      A    50
2  code2      C    50
1  code2      A    10
0  code3      D     5
7  code3      C    50 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45237465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档