【问题标题】:Writing a custom function for groupby column为 groupby 列编写自定义函数
【发布时间】:2019-03-14 19:14:10
【问题描述】:

尝试编写以下自定义 groupby 函数来计算给定二进制列 b 中 1 的百分比:

def _get_perc(ds):
    try: 
        return ds.value_counts(normalize=True).loc[1]
    except KeyError: 
        return 0.0
df[['group','b']].groupby('group').apply(_get_perc)

但是 pandas 将 ds 作为数据框而不是系列;它给了我一个 AttributeError: 'DataFrame' 对象没有属性 'value_counts'。

我应该如何编写将ds作为一个系列的函数?

【问题讨论】:

  • 你能举个例子 df = ???

标签: python pandas function group-by pandas-groupby


【解决方案1】:

只需使用系列标签索引GroupBy 对象:

def _get_perc(ds):
    try: 
        return ds.value_counts(normalize=True).loc[1]
    except KeyError: 
        return 0.0

df[['group','b']].groupby('group')['b'].apply(_get_perc)

【讨论】:

    【解决方案2】:

    指定要在列b 上显式完成分组。

    df
       group  b
    0      1  0
    1      1  1
    2      2  0
    3      2  0
    4      2  1
    
    df.groupby('group')['b'].apply(_get_perc)
    group
    1    0.500000
    2    0.333333
    Name: b, dtype: float64
    

    不需要预索引步骤。


    或者,value_counts也可以直接在Series上调用:

    df.groupby('group')['b'].value_counts(normalize=True).xs(1, level=1, axis=0)
    
    group
    1    0.500000
    2    0.333333
    Name: b, dtype: float64
    

    额外的xs 步骤是选择归一化的 1 计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2023-03-27
      • 2023-01-11
      • 2011-06-11
      • 2021-03-29
      相关资源
      最近更新 更多