好吧,这是一个可以解决两个问题的快捷方式(但对于加权均值仍然需要使用其他功能)。通常,它使用此处的技巧(贷记@DSM)来执行操作以避开空的组groupby(lamda x: True)
。如果在手段之类的东西上存在“权重”的扭曲,但据我所知没有,那将是很棒的。显然有是提到加权位数包这里基于numpy的,但我不知道这件事。伟大的项目顺便说一句!
(请注意,名称与您的名称基本相同,我只是在wmean_grouped和my_summary中添加了“ 2”,否则您可以使用相同的调用接口)
def wmean_grouped2 (group, var_name_in, var_name_weight):
d = group[var_name_in]
w = group[var_name_weight]
return (d * w).sum() / w.sum()
FUNCS = { "mean" : np.mean ,
"sum" : np.sum ,
"count" : np.count_nonzero }
def my_summary2 (
data ,
var_names_in ,
var_names_out ,
var_functions ,
var_name_weight = None ,
var_names_group = None ):
result = pd.DataFrame()
if var_names_group is None:
grouped = data.groupby (lambda x: True)
else:
grouped = data.groupby (var_names_group)
for var_name_in, var_name_out, var_function in \
zip(var_names_in,var_names_out,var_functions):
if var_function == "wmean":
func = lambda x : wmean_grouped2 (x, var_name_in, var_name_weight)
result[var_name_out] = pd.Series(grouped.apply(func))
else:
func = FUNCS[var_function]
result[var_name_out] = grouped[var_name_in].apply(func)
return result