diff --git a/alphalens/performance.py b/alphalens/performance.py index d0128e14..8152cb54 100644 --- a/alphalens/performance.py +++ b/alphalens/performance.py @@ -638,9 +638,7 @@ def mean_return_by_quantile(factor_data, else: factor_data = factor_data.copy() - grouper = ['factor_quantile'] - if by_date: - grouper.append(factor_data.index.get_level_values('date')) + grouper = ['factor_quantile', factor_data.index.get_level_values('date')] if by_group: grouper.append('group') @@ -651,6 +649,14 @@ def mean_return_by_quantile(factor_data, mean_ret = group_stats.T.xs('mean', level=1).T + if not by_date: + grouper = [mean_ret.index.get_level_values('factor_quantile')] + if by_group: + grouper.append(mean_ret.index.get_level_values('group')) + group_stats = mean_ret.groupby(grouper)\ + .agg(['mean', 'std', 'count']) + mean_ret = group_stats.T.xs('mean', level=1).T + std_error_ret = group_stats.T.xs('std', level=1).T \ / np.sqrt(group_stats.T.xs('count', level=1).T)