尝试编写以下自定义 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作为Series的函数应该怎么写?
指定要在 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 的归一化计数。
我是一名优秀的程序员,十分优秀!