Skip to content

Commit 45d5eef

Browse files
committed
added quantile and describe to Series
1 parent af29e41 commit 45d5eef

File tree

3 files changed

+48
-2
lines changed

3 files changed

+48
-2
lines changed

pandas/core/frame.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2154,8 +2154,8 @@ def mean(self, axis=0):
21542154

21552155
def quantile(self, q=0.5, axis=0):
21562156
"""
2157-
Return array or Series of score at the given `per` percentile
2158-
over requested axis.
2157+
Return array or Series of values at the given quantile over requested
2158+
axis.
21592159
21602160
Parameters
21612161
----------

pandas/core/series.py

+33
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,39 @@ def mean(self, axis=None, dtype=None, out=None):
386386
"""
387387
return self._ndarray_statistic('mean')
388388

389+
def quantile(self, q=0.5):
390+
"""
391+
Return value at the given quantile
392+
393+
Parameters
394+
----------
395+
q : quantile
396+
0 <= q <= 1
397+
398+
Returns
399+
-------
400+
q : float
401+
"""
402+
from scipy.stats import scoreatpercentile
403+
return scoreatpercentile(self.valid().values, q * 100)
404+
405+
def describe(self):
406+
"""
407+
Generate various summary statistics of columns, excluding NaN values
408+
409+
Returns
410+
-------
411+
DataFrame
412+
"""
413+
names = ['count', 'mean', 'std', 'min',
414+
'10%', '50%', '90%', 'max']
415+
416+
data = [self.count(), self.mean(), self.std(), self.min(),
417+
self.quantile(.1), self.median(), self.quantile(.9),
418+
self.max()]
419+
420+
return Series(data, index=names)
421+
389422
def _ndarray_statistic(self, funcname):
390423
arr = self.values
391424
retVal = getattr(arr, funcname)()

pandas/core/tests/test_series.py

+13
Original file line numberDiff line numberDiff line change
@@ -258,6 +258,19 @@ def test_stats(self):
258258
self.assert_(np.isnan(Series([1.], index=[1]).var()))
259259
self.assert_(np.isnan(Series([1.], index=[1]).skew()))
260260

261+
def test_quantile(self):
262+
from scipy.stats import scoreatpercentile
263+
264+
q = self.ts.quantile(0.1)
265+
self.assertEqual(q, scoreatpercentile(self.ts.valid(), 10))
266+
267+
q = self.ts.quantile(0.9)
268+
self.assertEqual(q, scoreatpercentile(self.ts.valid(), 90))
269+
270+
def test_describe(self):
271+
_ = self.series.describe()
272+
_ = self.ts.describe()
273+
261274
def test_append(self):
262275
appendedSeries = self.series.append(self.ts)
263276
for idx, value in appendedSeries.iteritems():

0 commit comments

Comments
 (0)