Skip to content

Commit 656cf77

Browse files
committed
Added tests to mix group entries; fixed sort bug
1 parent 5d7d919 commit 656cf77

File tree

2 files changed

+41
-12
lines changed

2 files changed

+41
-12
lines changed

pandas/_libs/groupby_helper.pxi.in

+1-1
Original file line numberDiff line numberDiff line change
@@ -662,7 +662,7 @@ def group_fillna_{{name}}(ndarray[{{dest_type2}}, ndim=2] out,
662662

663663
sorted_labels = np.argsort(labels)
664664
if method == 'bfill':
665-
sorted_labels[::-1].sort()
665+
sorted_labels = sorted_labels[::-1]
666666

667667
{{if name == 'object'}}
668668
if True: # make templating happy

pandas/tests/groupby/test_groupby.py

+40-11
Original file line numberDiff line numberDiff line change
@@ -2061,30 +2061,59 @@ def test_rank_object_raises(self, ties_method, ascending, na_option,
20612061
ascending=ascending,
20622062
na_option=na_option, pct=pct)
20632063

2064+
@pytest.mark.parametrize("mix_groupings", [True, False])
20642065
@pytest.mark.parametrize("as_series", [True, False])
2066+
@pytest.mark.parametrize("val1,val2", [
2067+
('foo', 'bar'), (1, 2), (1., 2.)])
20652068
@pytest.mark.parametrize("fill_method,limit,exp_vals", [
20662069
("ffill", None,
2067-
[np.nan, np.nan, 'foo', 'foo', 'foo', 'bar', 'bar', 'bar']),
2070+
[np.nan, np.nan, 'val1', 'val1', 'val1', 'val2', 'val2', 'val2']),
20682071
("ffill", 1,
2069-
[np.nan, np.nan, 'foo', 'foo', np.nan, 'bar', 'bar', np.nan]),
2072+
[np.nan, np.nan, 'val1', 'val1', np.nan, 'val2', 'val2', np.nan]),
20702073
("bfill", None,
2071-
['foo', 'foo', 'foo', 'bar', 'bar', 'bar', np.nan, np.nan]),
2074+
['val1', 'val1', 'val1', 'val2', 'val2', 'val2', np.nan, np.nan]),
20722075
("bfill", 1,
2073-
[np.nan, 'foo', 'foo', np.nan, 'bar', 'bar', np.nan, np.nan])
2076+
[np.nan, 'val1', 'val1', np.nan, 'val2', 'val2', np.nan, np.nan])
20742077
])
2075-
def test_group_fill_methods(self, as_series, fill_method, limit, exp_vals):
2076-
vals = [np.nan, np.nan, 'foo', np.nan, np.nan, 'bar', np.nan, np.nan]
2077-
keys = ['a'] * len(vals) + ['b'] * len(vals)
2078-
df = DataFrame({'key': keys, 'val': vals * 2})
2079-
2078+
def test_group_fill_methods(self, mix_groupings, as_series, val1, val2,
2079+
fill_method, limit, exp_vals):
2080+
vals = [np.nan, np.nan, val1, np.nan, np.nan, val2, np.nan, np.nan]
2081+
_exp_vals = list(exp_vals)
2082+
# Overwrite placeholder values
2083+
for index, exp_val in enumerate(_exp_vals):
2084+
if exp_val == 'val1':
2085+
_exp_vals[index] = val1
2086+
elif exp_val == 'val2':
2087+
_exp_vals[index] = val2
2088+
2089+
# Need to modify values and expectations depending on the
2090+
# Series / DataFrame that we ultimately want to generate
2091+
if mix_groupings: # ['a', 'b', 'a, 'b', ...]
2092+
keys = ['a', 'b'] * len(vals)
2093+
2094+
def interweave(list_obj):
2095+
temp = list()
2096+
for x in list_obj:
2097+
temp.extend([x, x])
2098+
2099+
return temp
2100+
2101+
_exp_vals = interweave(_exp_vals)
2102+
vals = interweave(vals)
2103+
else: # ['a', 'a', 'a', ... 'b', 'b', 'b']
2104+
keys = ['a'] * len(vals) + ['b'] * len(vals)
2105+
_exp_vals = _exp_vals * 2
2106+
vals = vals * 2
2107+
2108+
df = DataFrame({'key': keys, 'val': vals})
20802109
if as_series:
20812110
result = getattr(
20822111
df.groupby('key')['val'], fill_method)(limit=limit)
2083-
exp = Series(exp_vals * 2, name='val')
2112+
exp = Series(_exp_vals, name='val')
20842113
assert_series_equal(result, exp)
20852114
else:
20862115
result = getattr(df.groupby('key'), fill_method)(limit=limit)
2087-
exp = DataFrame({'key': keys, 'val': exp_vals * 2})
2116+
exp = DataFrame({'key': keys, 'val': _exp_vals})
20882117
assert_frame_equal(result, exp)
20892118

20902119
def test_dont_clobber_name_column(self):

0 commit comments

Comments
 (0)