Skip to content

Commit e41fd5a

Browse files
committed
TST: unit testing for *args/**kwargs in groupby. address GH #132
1 parent 59ed030 commit e41fd5a

File tree

3 files changed

+52
-6
lines changed

3 files changed

+52
-6
lines changed

pandas/core/groupby.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -863,9 +863,13 @@ def _aggregate_generic(self, func, *args, **kwargs):
863863
else:
864864
raise e1
865865

866-
result = DataFrame(result)
867-
if axis == 0:
868-
result = result.T
866+
if result:
867+
if axis == 0:
868+
result = DataFrame(result, index=obj.columns).T
869+
else:
870+
result = DataFrame(result, index=obj.index)
871+
else:
872+
result = DataFrame(result)
869873

870874
return result
871875

pandas/core/series.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -240,10 +240,12 @@ def __getitem__(self, key):
240240
values = self.values
241241
try:
242242
return values[self.index.get_loc(key)]
243-
except KeyError:
244-
if isinstance(key, (int, np.integer)):
243+
except KeyError, e1:
244+
try:
245245
return values[key]
246-
raise
246+
except Exception, _:
247+
pass
248+
raise e1
247249
except TypeError:
248250
pass
249251

pandas/tests/test_groupby.py

+40
Original file line numberDiff line numberDiff line change
@@ -753,6 +753,46 @@ def test_groupby_with_hier_columns(self):
753753
result = df.groupby(level=0).mean()
754754
self.assert_(result.columns.equals(sorted_columns))
755755

756+
def test_pass_args_kwargs(self):
757+
from scipy.stats import scoreatpercentile
758+
759+
def f(x, q=None):
760+
return scoreatpercentile(x, q)
761+
g = lambda x: scoreatpercentile(x, 80)
762+
763+
# Series
764+
ts_grouped = self.ts.groupby(lambda x: x.month)
765+
agg_result = ts_grouped.agg(scoreatpercentile, 80)
766+
apply_result = ts_grouped.apply(scoreatpercentile, 80)
767+
trans_result = ts_grouped.transform(scoreatpercentile, 80)
768+
769+
agg_expected = ts_grouped.quantile(.8)
770+
trans_expected = ts_grouped.transform(g)
771+
772+
assert_series_equal(apply_result, agg_expected)
773+
assert_series_equal(agg_result, agg_expected)
774+
assert_series_equal(trans_result, trans_expected)
775+
776+
agg_result = ts_grouped.agg(f, q=80)
777+
apply_result = ts_grouped.apply(f, q=80)
778+
trans_result = ts_grouped.transform(f, q=80)
779+
assert_series_equal(agg_result, agg_expected)
780+
assert_series_equal(apply_result, agg_expected)
781+
assert_series_equal(trans_result, trans_expected)
782+
783+
# DataFrame
784+
df_grouped = self.tsframe.groupby(lambda x: x.month)
785+
agg_result = df_grouped.agg(scoreatpercentile, 80)
786+
apply_result = df_grouped.apply(DataFrame.quantile, .8)
787+
expected = df_grouped.quantile(.8)
788+
assert_frame_equal(apply_result, expected)
789+
assert_frame_equal(agg_result, expected)
790+
791+
agg_result = df_grouped.agg(f, q=80)
792+
apply_result = df_grouped.apply(DataFrame.quantile, q=.8)
793+
assert_frame_equal(agg_result, expected)
794+
assert_frame_equal(apply_result, expected)
795+
756796
class TestPanelGroupBy(unittest.TestCase):
757797

758798
def setUp(self):

0 commit comments

Comments
 (0)