|
7 | 7 | from pandas import bdate_range
|
8 | 8 | from pandas.core.index import Index, MultiIndex
|
9 | 9 | from pandas.core.common import rands
|
10 |
| -from pandas.core.frame import DataFrame |
| 10 | +from pandas.core.api import Factor, DataFrame |
11 | 11 | from pandas.core.groupby import GroupByError
|
12 | 12 | from pandas.core.series import Series
|
13 | 13 | from pandas.util.testing import (assert_panel_equal, assert_frame_equal,
|
@@ -1879,6 +1879,33 @@ def test_no_dummy_key_names(self):
|
1879 | 1879 | self.df['B'].values]).sum()
|
1880 | 1880 | self.assert_(result.index.names == [None, None])
|
1881 | 1881 |
|
| 1882 | + def test_groupby_factor(self): |
| 1883 | + levels = ['foo', 'bar', 'baz', 'qux'] |
| 1884 | + labels = np.random.randint(0, 4, size=100) |
| 1885 | + |
| 1886 | + factor = Factor(labels, levels, name='myfactor') |
| 1887 | + |
| 1888 | + data = DataFrame(np.random.randn(100, 4)) |
| 1889 | + |
| 1890 | + result = data.groupby(factor).mean() |
| 1891 | + |
| 1892 | + expected = data.groupby(np.asarray(factor)).mean() |
| 1893 | + expected = expected.reindex(levels) |
| 1894 | + |
| 1895 | + assert_frame_equal(result, expected) |
| 1896 | + self.assert_(result.index.name == factor.name) |
| 1897 | + |
| 1898 | + grouped = data.groupby(factor) |
| 1899 | + desc_result = grouped.describe() |
| 1900 | + |
| 1901 | + idx = factor.labels.argsort() |
| 1902 | + ord_labels = np.asarray(factor).take(idx) |
| 1903 | + ord_data = data.take(idx) |
| 1904 | + expected = ord_data.groupby(ord_labels, sort=False).describe() |
| 1905 | + assert_frame_equal(desc_result, expected) |
| 1906 | + |
| 1907 | + |
| 1908 | + |
1882 | 1909 | def _check_groupby(df, result, keys, field, f=lambda x: x.sum()):
|
1883 | 1910 | tups = map(tuple, df[keys].values)
|
1884 | 1911 | tups = com._asarray_tuplesafe(tups)
|
|
0 commit comments