【问题标题】:Grouping limited records and the rest group as other将有限的记录和其余的记录分组为其他
【发布时间】:2019-12-11 16:28:54
【问题描述】:

有没有办法像这样对数据进行分组

df.Feature.value_counts(normalize=True)

但不要给出全部记录,只给我前 5 条记录,其余记录组为“其他”

例如这是我在运行上面的代码时得到的输出

NUEVO LEON          9.566025
ESTADO DE MEXICO    8.979984
TAMAULIPAS          7.939926
VERACRUZ            7.686035
DISTRITO FEDERAL    7.257108
COAHUILA            5.283328
JALISCO             4.835284
BAJA CALIFORNIA     4.280905
MICHOACAN           4.160830
GUANAJUATO          4.129765

这是我正在寻找的输出


NUEVO LEON          9.566025
ESTADO DE MEXICO    8.979984
TAMAULIPAS          7.939926
VERACRUZ            7.686035
DISTRITO FEDERAL    7.257108
OTHERS              24.56156

【问题讨论】:

  • 您想将小于 5 的任何值归为“其他”并求和吗?

标签: python pandas grouping


【解决方案1】:

我会在value_counts 之后执行此操作,因为结果将按降序排序。给定系列sdf.Feature.value_counts(normalize=True) 的结果,您可以保留前 5 个,然后对其他所有内容求和。

import pandas as pd

N = 5
pd.concat([s.iloc[:N], pd.Series(s.iloc[N:].sum(), index=['OTHERS'])])
#NUEVO LEON           9.566025
#ESTADO DE MEXICO     8.979984
#TAMAULIPAS           7.939926
#VERACRUZ             7.686035
#DISTRITO FEDERAL     7.257108
#OTHERS              22.690112
#dtype: float64

【讨论】:

    【解决方案2】:

    如果您可以为此创建一个临时列,您可以这样做:

    # where keep_list = the list of values not in "other"
    df['temp'] = df['Feature'].copy()
    df.loc[~df['temp'].isin(keep_list), 'temp'] = 'Other'
    df['temp'].value_counts(normalize=True)
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      import pandas as pd
      
      
      sample_grouped = pd.DataFrame({'location': ["NUEVO LEON", "ESTADO DE MEXICO", "TAMAULIPAS", "VERACRUZ", "DISTRITO FEDERAL", "COAHUILA", "JALISCO", "BAJA CALIFORNIA", "MICHOACAN", "GUANAJUATO"],
                                     'amount': [9.566025, 8.979984, 7.939926, 7.686035, 7.257108, 5.283328, 4.835284, 4.280905, 4.160830, 4.129765]})
      
      top_5 = sample_grouped[:5]
      
      others = sample_grouped[5:]
      
      others_total = others.iloc[:,[1]].sum()[0]
      
      result = pd.DataFrame.append(top_5, pd.DataFrame({'location': ['OTHERS'], 'amount': [others_total]}))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-13
        • 2019-11-01
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多