【问题标题】:How can I group by the count number of column values and sort it?如何按列值的计数进行分组并对其进行排序?
【发布时间】:2017-12-13 01:37:04
【问题描述】:

如何按列值的计数进行分组并排序?

我是熊猫学习者。

我有一个名为 data.log 的原始数据框。现在我想按'c-ip-1'计算数字组,并对结果进行排序。

原始data.log:

   sc-status  sc-substatus  sc-win32-status  time-taken       c-ip-1
0        200             0                0         986  31.7.188.55
1        200             0                0        2539  31.7.188.55
2        200             0                0        1172  31.7.188.56
3        200             0                0        3152  31.7.188.80
4        200             0                0        1091  31.7.188.80
...
99       200             0                0        1115  31.9.200.60
100      200             0                0        2000  31.9.200.61

预期结果如下:

         c-ip-1                 count
0        31.7.188.56            1     
1        31.9.200.61            1  
2        31.7.188.55            2  
...
34       31.9.200.60            5

我尝试编写python代码并运行它,但是失败了:

import pandas as pd

df = pd.read_table('data.log', sep=" ")

print(df[['c-ip-1']].groupby(['c-ip-1']).agg(['count'])

如何使用python解决问题?

【问题讨论】:

    标签: python pandas sorting count group-by


    【解决方案1】:

    我认为您需要通过GroupBy.size 聚合,然后是Series.sort_values,最后是Series.reset_index

    #better is more general separator `\s+` - one or more whitespaces
    df = pd.read_table('data.log', sep="\s+")
    
    df1 = df.groupby('c-ip-1').size().sort_values().reset_index(name='count')
    print (df1)
            c-ip-1  count
    0  31.7.188.56      1
    1  31.9.200.60      1
    2  31.9.200.61      1
    3  31.7.188.55      2
    4  31.7.188.80      2
    

    What is the difference between size and count in pandas?

    【讨论】:

      【解决方案2】:

      您可以使用pd.Series.value_counts。默认情况下,它按计数大小的降序排序。您可以传递参数ascending=False 来反转它。然后重命名轴和列

      df['c-ip-1'].value_counts(ascending=True) \
          .rename_axis('c-ip-1').reset_index(name='count')
      
              c-ip-1  count
      0  31.9.200.61      1
      1  31.9.200.60      1
      2  31.7.188.56      1
      3  31.7.188.55      2
      4  31.7.188.80      2
      

      【讨论】:

      • 我会感谢一些关于否决票的反馈。我希望有机会解决任何问题
      【解决方案3】:
      df[['c-ip-1']].groupby(['c-ip-1']).agg(c=('type', 'count')).sort_values("c")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-01
        • 2016-04-08
        • 1970-01-01
        • 1970-01-01
        • 2018-03-01
        • 2016-10-06
        • 2022-01-03
        • 2010-11-18
        相关资源
        最近更新 更多