@@ -2807,6 +2807,8 @@ def _add_numeric_operations(cls):
2807
2807
name = cls ._constructor_sliced .__name__ if cls ._AXIS_LEN > 1 else 'scalar'
2808
2808
_num_doc = """
2809
2809
2810
+ %(desc)s
2811
+
2810
2812
Parameters
2811
2813
----------
2812
2814
axis : """ + axis_descr + """
@@ -2822,7 +2824,7 @@ def _add_numeric_operations(cls):
2822
2824
2823
2825
Returns
2824
2826
-------
2825
- %(outname)s : """ + name + "\n "
2827
+ %(outname)s : """ + name + " or " + cls . __name__ + " (if level specified) \n "
2826
2828
2827
2829
_cnum_doc = """
2828
2830
@@ -2837,25 +2839,46 @@ def _add_numeric_operations(cls):
2837
2839
-------
2838
2840
%(outname)s : """ + name + "\n "
2839
2841
2840
- @Substitution (outname = 'sum' )
2841
- @Appender (_num_doc )
2842
- def sum (self , axis = None , skipna = True , level = None , numeric_only = None ,
2843
- ** kwargs ):
2844
- """ Return sum over requested axis """
2842
+ def _make_stat_function (name , desc , f ):
2845
2843
2846
- if axis is None :
2847
- axis = self ._stat_axis_number
2848
- if level is not None :
2849
- return self ._agg_by_level ('sum' , axis = axis , level = level ,
2850
- skipna = skipna )
2851
- return self ._reduce (nanops .nansum , axis = axis ,
2852
- skipna = skipna , numeric_only = numeric_only )
2853
- cls .sum = sum
2854
-
2855
- @Substitution (outname = 'mad' )
2844
+ @Substitution (outname = name , desc = desc )
2845
+ @Appender (_num_doc )
2846
+ def stat_func (self , axis = None , skipna = None , level = None , numeric_only = None ,
2847
+ ** kwargs ):
2848
+ if skipna is None :
2849
+ skipna = True
2850
+ if axis is None :
2851
+ axis = self ._stat_axis_number
2852
+ if level is not None :
2853
+ return self ._agg_by_level (name , axis = axis , level = level ,
2854
+ skipna = skipna )
2855
+ return self ._reduce (f , axis = axis ,
2856
+ skipna = skipna , numeric_only = numeric_only )
2857
+ stat_func .__name__ = name
2858
+ return stat_func
2859
+
2860
+ cls .sum = _make_stat_function ('sum' ,"Return the sum of the values for the requested axis" , nanops .nansum )
2861
+ cls .mean = _make_stat_function ('mean' ,"Return the mean of the values for the requested axis" , nanops .nanmean )
2862
+ cls .skew = _make_stat_function ('skew' ,"Return unbiased skew over requested axis\n Normalized by N-1" , nanops .nanskew )
2863
+ cls .kurt = _make_stat_function ('kurt' ,"Return unbiased kurtosis over requested axis\n Normalized by N-1" , nanops .nankurt )
2864
+ cls .kurtosis = cls .kurt
2865
+ cls .prod = _make_stat_function ('prod' ,"Return the product of the values for the requested axis" , nanops .nanprod )
2866
+ cls .product = cls .prod
2867
+ cls .median = _make_stat_function ('median' ,"Return the median of the values for the requested axis" , nanops .nanmedian )
2868
+ cls .max = _make_stat_function ('max' ,"""
2869
+ This method returns the maximum of the values in the object. If you
2870
+ want the *index* of the maximum, use ``idxmax``. This is the
2871
+ equivalent of the ``numpy.ndarray`` method ``argmax``.""" , nanops .nanmax )
2872
+ cls .min = _make_stat_function ('min' ,"""
2873
+ This method returns the minimum of the values in the object. If you
2874
+ want the *index* of the minimum, use ``idxmin``. This is the
2875
+ equivalent of the ``numpy.ndarray`` method ``argmin``.""" , nanops .nanmin )
2876
+
2877
+ @Substitution (outname = 'mad' , desc = "Return the mean absolute deviation of the values for the requested axis" )
2856
2878
@Appender (_num_doc )
2857
- def mad (self , axis = None , skipna = True , level = None , ** kwargs ):
2858
- """ Return the mean absolute deviation of the values for the requested axis """
2879
+ def mad (self , axis = None , skipna = None , level = None , ** kwargs ):
2880
+ if skipna is None :
2881
+ skipna = True
2859
2882
if axis is None :
2860
2883
axis = self ._stat_axis_number
2861
2884
if level is not None :
@@ -2870,27 +2893,11 @@ def mad(self, axis=None, skipna=True, level=None, **kwargs):
2870
2893
return np .abs (demeaned ).mean (axis = axis , skipna = skipna )
2871
2894
cls .mad = mad
2872
2895
2873
- @Substitution (outname = 'mean' )
2896
+ @Substitution (outname = 'variance' , desc = "Return unbiased variance over requested axis \n Normalized by N-1" )
2874
2897
@Appender (_num_doc )
2875
- def mean (self , axis = None , skipna = True , level = None , numeric_only = None , ** kwargs ):
2876
- """ Return mean over requested axis """
2877
-
2878
- if axis is None :
2879
- axis = self ._stat_axis_number
2880
- if level is not None :
2881
- return self ._agg_by_level ('mean' , axis = axis , level = level ,
2882
- skipna = skipna )
2883
- return self ._reduce (nanops .nanmean , axis = axis ,
2884
- skipna = skipna , numeric_only = numeric_only )
2885
- cls .mean = mean
2886
-
2887
- @Substitution (outname = 'variance' )
2888
- @Appender (_num_doc )
2889
- def var (self , axis = None , skipna = True , level = None , ddof = 1 , ** kwargs ):
2890
- """
2891
- Return unbiased variance over requested axis
2892
- Normalized by N-1 (unbiased estimator).
2893
- """
2898
+ def var (self , axis = None , skipna = None , level = None , ddof = 1 , ** kwargs ):
2899
+ if skipna is None :
2900
+ skipna = True
2894
2901
if axis is None :
2895
2902
axis = self ._stat_axis_number
2896
2903
if level is not None :
@@ -2900,13 +2907,11 @@ def var(self, axis=None, skipna=True, level=None, ddof=1, **kwargs):
2900
2907
return self ._reduce (nanops .nanvar , axis = axis , skipna = skipna , ddof = ddof )
2901
2908
cls .var = var
2902
2909
2903
- @Substitution (outname = 'stdev' )
2910
+ @Substitution (outname = 'stdev' , desc = "Return unbiased standard deviation over requested axis \n Normalized by N-1" )
2904
2911
@Appender (_num_doc )
2905
- def std (self , axis = None , skipna = True , level = None , ddof = 1 , ** kwargs ):
2906
- """
2907
- Return unbiased standard deviation over requested axis
2908
- Normalized by N-1 (unbiased estimator).
2909
- """
2912
+ def std (self , axis = None , skipna = None , level = None , ddof = 1 , ** kwargs ):
2913
+ if skipna is None :
2914
+ skipna = True
2910
2915
if axis is None :
2911
2916
axis = self ._stat_axis_number
2912
2917
if level is not None :
@@ -2918,105 +2923,14 @@ def std(self, axis=None, skipna=True, level=None, ddof=1, **kwargs):
2918
2923
return np .sqrt (result )
2919
2924
cls .std = std
2920
2925
2921
- @Substitution (outname = 'skew' )
2922
- @Appender (_num_doc )
2923
- def skew (self , axis = None , skipna = True , level = None , ** wwargs ):
2924
- """
2925
- Return unbiased standard skewness over requested axis
2926
- Normalized by N-1 (unbiased estimator).
2927
- """
2928
- if axis is None :
2929
- axis = self ._stat_axis_number
2930
- if level is not None :
2931
- return self ._agg_by_level ('skew' , axis = axis , level = level ,
2932
- skipna = skipna )
2933
- return self ._reduce (nanops .nanskew , axis = axis , skipna = skipna )
2934
- cls .skew = skew
2935
-
2936
- @Substitution (outname = 'kurt' )
2937
- @Appender (_num_doc )
2938
- def kurt (self , axis = None , skipna = True , level = None , ** kwargs ):
2939
- """
2940
- Return unbiased standard kurtosis over requested axis
2941
- Normalized by N-1 (unbiased estimator).
2942
- """
2943
- if axis is None :
2944
- axis = self ._stat_axis_number
2945
- if level is not None :
2946
- return self ._agg_by_level ('kurt' , axis = axis , level = level ,
2947
- skipna = skipna )
2948
- return self ._reduce (nanops .nankurt , axis = axis , skipna = skipna ,
2949
- numeric_only = None )
2950
- cls .kurt = kurt
2951
-
2952
- @Substitution (outname = 'prod' )
2953
- @Appender (_num_doc )
2954
- def prod (self , axis = None , skipna = True , level = None , ** kwargs ):
2955
- """
2956
- Return product of the values over requested axis
2957
- """
2958
- if axis is None :
2959
- axis = self ._stat_axis_number
2960
- if level is not None :
2961
- return self ._agg_by_level ('prod' , axis = axis , level = level ,
2962
- skipna = skipna )
2963
- return self ._reduce (nanops .nanprod , axis = axis , skipna = skipna )
2964
- cls .prod = prod
2965
- cls .product = prod
2966
-
2967
- @Substitution (outname = 'compounded' )
2926
+ @Substitution (outname = 'compounded' ,desc = "Return the compound percentage of the values for the requested axis" )
2968
2927
@Appender (_num_doc )
2969
- def compound (self , axis = None , skipna = True , level = None , ** kwargs ):
2970
- """ return the compound percentage of the values for the requested axis """
2928
+ def compound (self , axis = None , skipna = None , level = None , ** kwargs ):
2929
+ if skipna is None :
2930
+ skipna = True
2971
2931
return (1 + self ).prod (axis = axis , skipna = skipna , level = level ) - 1
2972
2932
cls .compound = compound
2973
2933
2974
- @Substitution (outname = 'median' )
2975
- @Appender (_num_doc )
2976
- def median (self , axis = None , skipna = True , level = None , ** kwargs ):
2977
- """
2978
- Return median of the values over requested axis
2979
- """
2980
- if axis is None :
2981
- axis = self ._stat_axis_number
2982
- if level is not None :
2983
- return self ._agg_by_level ('median' , axis = axis , level = level ,
2984
- skipna = skipna )
2985
- return self ._reduce (nanops .nanmedian , axis = axis , skipna = skipna )
2986
- cls .median = median
2987
-
2988
- @Substitution (outname = 'maximum' )
2989
- @Appender (_num_doc )
2990
- def max (self , axis = None , skipna = True , level = None , ** kwargs ):
2991
- """
2992
- This method returns the maximum of the values in the objec. If you
2993
- want the *index* of the maximum, use ``idxmax``. This is the
2994
- equivalent of the ``numpy.ndarray`` method ``argmax``.
2995
- """
2996
- if axis is None :
2997
- axis = self ._stat_axis_number
2998
- if level is not None :
2999
- return self ._agg_by_level ('max' , axis = axis , level = level ,
3000
- skipna = skipna )
3001
- return self ._reduce (nanops .nanmax , axis = axis , skipna = skipna )
3002
- cls .max = max
3003
-
3004
- @Substitution (outname = 'minimum' )
3005
- @Appender (_num_doc )
3006
- def min (self , axis = None , skipna = True , level = None , ** kwargs ):
3007
- """
3008
- This method returns the minimum of the values in the object. If you
3009
- want the *index* of the minimum, use ``idxmin``. This is the
3010
- equivalent of the ``numpy.ndarray`` method ``argmin``.
3011
- """
3012
- if axis is None :
3013
- axis = self ._stat_axis_number
3014
- if level is not None :
3015
- return self ._agg_by_level ('min' , axis = axis , level = level ,
3016
- skipna = skipna )
3017
- return self ._reduce (nanops .nanmin , axis = axis , skipna = skipna )
3018
- cls .min = min
3019
-
3020
2934
def _make_cum_function (name , accum_func , mask_a , mask_b ):
3021
2935
3022
2936
@Substitution (outname = name )
@@ -3041,6 +2955,8 @@ def func(self, axis=None, dtype=None, out=None, skipna=True, **kwargs):
3041
2955
d = self ._construct_axes_dict ()
3042
2956
d ['copy' ] = False
3043
2957
return self ._constructor (result , ** d )._propogate_attributes (self )
2958
+
2959
+ func .__name__ = name
3044
2960
return func
3045
2961
3046
2962
0 commit comments