Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 2b44e8f

Browse files
committedJul 5, 2013
ENH melt uses column name if available
1 parent 9044fe7 commit 2b44e8f

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed
 

‎pandas/core/reshape.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ def _stack_multi_columns(frame, level=-1, dropna=True):
601601

602602

603603
def melt(frame, id_vars=None, value_vars=None,
604-
var_name='variable', value_name='value'):
604+
var_name=None, value_name='value'):
605605
"""
606606
"Unpivots" a DataFrame from wide format to long format, optionally leaving
607607
id variables set
@@ -611,8 +611,8 @@ def melt(frame, id_vars=None, value_vars=None,
611611
frame : DataFrame
612612
id_vars : tuple, list, or ndarray
613613
value_vars : tuple, list, or ndarray
614-
var_name : scalar
615-
value_name : scalar
614+
var_name : scalar, if None uses frame.column.name or 'variable'
615+
value_name : scalar, default 'value'
616616
617617
Examples
618618
--------
@@ -634,6 +634,7 @@ def melt(frame, id_vars=None, value_vars=None,
634634
a B 1
635635
b B 3
636636
c B 5
637+
637638
"""
638639
# TODO: what about the existing index?
639640
if id_vars is not None:
@@ -651,6 +652,9 @@ def melt(frame, id_vars=None, value_vars=None,
651652
else:
652653
frame = frame.copy()
653654

655+
if var_name is None:
656+
var_name = frame.columns.name if frame.columns.name is not None else 'variable'
657+
654658
N, K = frame.shape
655659
K -= len(id_vars)
656660

‎pandas/tests/test_reshape.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ def test_melt():
9393
columns=['id1', 'id2', var_name, value_name])
9494
tm.assert_frame_equal(result19, expected19)
9595

96+
df1 = df.copy()
97+
df1.columns.name = 'foo'
98+
result20 = melt(df1)
99+
assert(result20.columns.tolist() == ['foo', 'value'])
100+
96101
def test_convert_dummies():
97102
df = DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
98103
'foo', 'bar', 'foo', 'foo'],

0 commit comments

Comments
 (0)
Please sign in to comment.