unpivotting 时缺少索引 / melt() Pandas DataFrame with MultiIndex columns and rows
Missing index when unpivotting / melt() Pandas DataFrame with MultiIndex columns and rows
我想 "flatten" 一个现有的 Dataframe 并遇到 Pandas melt()
命令。这似乎是这里的首选武器,但行为有点出乎意料(至少对我而言)。让我们从一个相当无辜的 MultiIndex DataFrame 开始:
df = pd.DataFrame(np.random.randn(6, 6),
index=pd.MultiIndex.from_arrays([['X','X','X','Y','Y','Y'],
['x','y','z','x','y','z']],
names=['omega1', 'omega2']),
columns=pd.MultiIndex.from_arrays([['A','A','A','B','B','B'],
['a','b','c','a','b','c']],
names=['alpha1', 'alpha2']))
提供一个不错的 DataFrame,例如:
alpha1 A ... B
alpha2 a b ... b c
omega1 omega2 ...
X x 2.362954 0.015595 ... 1.273841 -0.632132
y -0.134122 1.791614 ... 1.101646 -0.181099
z 0.410267 1.063625 ... -1.483590 0.521431
Y x 0.001779 -0.076198 ... -1.395494 1.177853
y 0.453172 1.899883 ... 1.116654 -2.209697
z 1.636227 -0.999949 ... 0.800413 -0.431485
当我现在做 df.melt()
时,我得到这样的结果:
alpha1 alpha2 value
0 A a 2.362954
1 A a -0.134122
2 A a 0.410267
3 A a 0.001779
...
33 B c 1.177853
34 B c -2.209697
35 B c -0.431485
不过我更期待这样的事情:
omega1 omega2 alpha1 alpha2 value
0 X x A a 2.362954
1 X y A a -0.134122
2 X z A a 0.410267
3 Y x A a 0.001779
...
33 Y x B c 1.177853
34 Y y B c -2.209697
35 Y z B c -0.431485
确切的顺序并不重要,但如果列名和行名保持不变就好了。
我无法 Pandas 正确地 return 索引。我做错了什么??
您需要 reset_index
索引,并使用索引名称
在 melt
中传递 ID
df.reset_index().melt(['omega1','omega2'])
我想 "flatten" 一个现有的 Dataframe 并遇到 Pandas melt()
命令。这似乎是这里的首选武器,但行为有点出乎意料(至少对我而言)。让我们从一个相当无辜的 MultiIndex DataFrame 开始:
df = pd.DataFrame(np.random.randn(6, 6),
index=pd.MultiIndex.from_arrays([['X','X','X','Y','Y','Y'],
['x','y','z','x','y','z']],
names=['omega1', 'omega2']),
columns=pd.MultiIndex.from_arrays([['A','A','A','B','B','B'],
['a','b','c','a','b','c']],
names=['alpha1', 'alpha2']))
提供一个不错的 DataFrame,例如:
alpha1 A ... B
alpha2 a b ... b c
omega1 omega2 ...
X x 2.362954 0.015595 ... 1.273841 -0.632132
y -0.134122 1.791614 ... 1.101646 -0.181099
z 0.410267 1.063625 ... -1.483590 0.521431
Y x 0.001779 -0.076198 ... -1.395494 1.177853
y 0.453172 1.899883 ... 1.116654 -2.209697
z 1.636227 -0.999949 ... 0.800413 -0.431485
当我现在做 df.melt()
时,我得到这样的结果:
alpha1 alpha2 value
0 A a 2.362954
1 A a -0.134122
2 A a 0.410267
3 A a 0.001779
...
33 B c 1.177853
34 B c -2.209697
35 B c -0.431485
不过我更期待这样的事情:
omega1 omega2 alpha1 alpha2 value
0 X x A a 2.362954
1 X y A a -0.134122
2 X z A a 0.410267
3 Y x A a 0.001779
...
33 Y x B c 1.177853
34 Y y B c -2.209697
35 Y z B c -0.431485
确切的顺序并不重要,但如果列名和行名保持不变就好了。 我无法 Pandas 正确地 return 索引。我做错了什么??
您需要 reset_index
索引,并使用索引名称
melt
中传递 ID
df.reset_index().melt(['omega1','omega2'])