代码之家  ›  专栏  ›  技术社区  ›  bw2007

两个分类变量的描述性统计数据(熊猫)

  •  4
  • bw2007  · 技术社区  · 7 年前

    我需要得到两个分类变量之间频率的均值和中位数。例如。:

    标签字母编号
    Foo | A | 1
    Foo | B | 2
    Foo | C | 4
    巴| A | 2

    巴| N | 1
    巴| P | 2
    中东欧| B | 1

    中东欧| C | 4
    中东欧| D | 5

    例如,每个标签上字母的平均数和中位数是多少。三种可能的标签中有11种(M=3.667),中位数为4(3 foo,4 bar,4 cee)。我怎么计算熊猫的这个呢。可以用groupby语句实现这一点吗?我的数据集比这个大得多。

    1 回复  |  直到 7 年前
        1
  •  2
  •   jezrael    7 年前

    需要 value_counts 对于一列或 groupby + size (或 count 如果需要省略 NaN s) :

    a = df['Label'].value_counts()
    print (a)
    Cee    4
    Bar    4
    Foo    3
    Name: Label, dtype: int64
    
    #alternative
    #a = df.groupby('Label').size()
    print (a.mean())
    3.6666666666666665
    
    print (a.median())
    4.0
    

    a = df.groupby(['Label','Letter']).size()
    print (a)
    Label  Letter
    Bar    A         1
           G         1
           N         1
           P         1
    Cee    B         2
           C         1
           D         1
    Foo    A         1
           B         1
           C         1
    dtype: int64
    
    print (a.mean())
    1.1
    
    print (a.median())
    1.0