Skip to content

Commit eb3d1b1

Browse files
committed
BUG: preserve index name when grouping by level
1 parent bc61a1d commit eb3d1b1

File tree

5 files changed

+15
-3
lines changed

5 files changed

+15
-3
lines changed

pandas/core/frame.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
from pandas.core.common import (isnull, notnull, PandasError, adjoin,
2525
_try_sort, _pfixed, _default_index,
26-
_infer_dtype, _stringify, _maybe_upcast)
26+
_stringify, _maybe_upcast)
2727
from pandas.core.daterange import DateRange
2828
from pandas.core.generic import NDFrame
2929
from pandas.core.index import Index, MultiIndex, NULL_INDEX, _ensure_index

pandas/core/groupby.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from pandas.core.frame import DataFrame
77
from pandas.core.generic import NDFrame, PandasObject
8-
from pandas.core.index import Index, Int64Index, MultiIndex
8+
from pandas.core.index import Index, MultiIndex
99
from pandas.core.internals import BlockManager
1010
from pandas.core.reshape import get_group_index
1111
from pandas.core.series import Series
@@ -536,6 +536,8 @@ def __init__(self, index, grouper=None, name=None, level=None):
536536

537537
inds = index.labels[level]
538538
labels = index.levels[level].take(inds)
539+
if self.name is None:
540+
self.name = index.names[level]
539541

540542
if grouper is not None:
541543
self.grouper = labels.map(self.grouper)
@@ -619,7 +621,7 @@ def _get_groupings(obj, grouper=None, axis=0, level=None):
619621
ping = Grouping(group_axis, arg, name=name, level=level)
620622
groupings.append(ping)
621623
else:
622-
name = 'key'
624+
name = None
623625
if isinstance(grouper, basestring):
624626
exclusions.append(grouper)
625627
name = grouper

pandas/tests/test_frame.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,9 @@ def test_from_records_tuples(self):
12101210
assert_frame_equal(result, df)
12111211
assert_frame_equal(result2, df)
12121212

1213+
result = DataFrame.from_records(tuples)
1214+
self.assert_(np.array_equal(result.columns, range(4)))
1215+
12131216
def test_get_agg_axis(self):
12141217
cols = self.frame._get_agg_axis(0)
12151218
self.assert_(cols is self.frame.columns)

pandas/tests/test_groupby.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,6 +730,8 @@ def test_groupby_level(self):
730730

731731
assert_frame_equal(result0, expected0)
732732
assert_frame_equal(result1, expected1)
733+
self.assertEquals(result0.index.name, frame.index.names[0])
734+
self.assertEquals(result1.index.name, frame.index.names[1])
733735

734736
# groupby level name
735737
result0 = frame.groupby(level='first').sum()

pandas/tests/test_multilevel.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ def _check_counts(frame, axis=0):
293293
for i in range(index.nlevels):
294294
result = frame.count(axis=axis, level=i)
295295
expected = frame.groupby(axis=axis, level=i).count(axis=axis)
296+
assert_frame_equal(result, expected.reindex_like(result))
296297

297298
self.frame.ix[1, [1, 2]] = np.nan
298299
self.frame.ix[7, [0, 1]] = np.nan
@@ -308,6 +309,10 @@ def _check_counts(frame, axis=0):
308309
df = tm.makeTimeDataFrame()
309310
self.assertRaises(Exception, df.count, level=0)
310311

312+
self.frame['D'] = 'foo'
313+
result = self.frame.count(level=0, numeric_only=True)
314+
assert_almost_equal(result.columns, ['A', 'B', 'C'])
315+
311316
def test_count_level_series(self):
312317
index = MultiIndex(levels=[['foo', 'bar', 'baz'],
313318
['one', 'two', 'three', 'four']],

0 commit comments

Comments
 (0)