微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – Pandas:使用现有的索引和列标题创建MultiIndex / groupby

我正在尝试采用二维数据帧并将其转换为(或多或少)一维数据帧,其中现有列用作第一级索引,列标题用作第二级指数.

我一直在尝试.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] 举报,一经查实,本站将立刻删除。

相关推荐