我正在尝试采用二维数据帧并将其转换为(或多或少)一维数据帧,其中现有列用作第一级索引,列标题用作第二级指数.
我一直在尝试.melt(),. groupby(),. transpose(),. MultipleIndex(),.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
提前致谢.
解决方法:
使用,set_index,stack和reset_index:
df.set_index('AXIS').stack().reset_index()
输出:
AXIS level_1 0
0 X A 100
1 X B 101
2 X C 102
3 X D 103
4 Y A 200
5 Y B 201
6 Y C 202
7 Y D 203
8 Z A 300
9 Z B 301
10 Z C 302
11 Z D 303
并且,您可以通过重命名列重置索引等来进行一些内务管理…
df.set_index('AXIS').stack().reset_index().rename(columns={'AXIS':'one','level_1':'two',0:'num'}).set_index(['one','two'])
输出:
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。