我正在尝试将二维数据框转换为(或多或少)一维数据框,其中现有列用作第一级索引,列标题用作二级指标。
我一直在尝试 .melt()
、.groupby()
、.transpose()
、.MultiIndex( )
、.pivot()
... 都没有任何运气 - 我认为主要是因为它们需要以某种我无法理解的方式组合。
设置:
import pandas as pd
from io import StringIO
csv = StringIO(u'''
AXIS A B C D
X 100 101 102 103
Y 200 201 202 203
Z 300 301 302 303
''')
df = pd.read_csv(csv, delim_whitespace = True)
期望的输出:
Num
One Two
X A 100
X B 101
X C 102
X D 103
Y A 200
Y B 201
Y C 202
Y D 203
Z A 300
Z B 301
Z C 302
Z D 303
提前致谢。
最佳答案
我喜欢这样的速度
i = df.AXIS.values
c = np.array(list('ABCD'))
v = np.column_stack([df[col].values for col in c])
idx = pd.MultiIndex.from_arrays(
[i.repeat(c.size), np.tile(c, i.size)],
names=['One', 'Two']
)
# Or this for brevity
# idx = pd.MultiIndex.from_product([i, c], names=['One', 'Two'])
pd.DataFrame(v.ravel(), idx, ['Num'])
Num
One Two
X A 100
B 101
C 102
D 103
Y A 200
B 201
C 202
D 203
Z A 300
B 301
C 302
D 303
关于python - Pandas:使用现有索引和列标题创建 MultiIndex/groupby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44055561/