为了账号安全,请及时绑定邮箱和手机立即绑定

重塑大熊猫至长熊猫

重塑大熊猫至长熊猫

ITMISS 2019-10-21 15:49:37
假设我在熊猫中有以下数据框:             AA  BB  CC        date   05/03     1   2   3     06/03     4   5   6     07/03     7   8   9     08/03     5   7   1  我想将其转换为以下内容:   AA 05/03    1   AA 06/03    4   AA 07/03    7   AA 08/03    5   BB 05/03    2   BB 06/03    5   BB 07/03    8   BB 08/03    7   CC 05/03    3   CC 06/03    6   CC 07/03    9   CC 08/03    1我该怎么做?从宽到长的转换的原因是,在下一阶段,我想根据日期和初始列名(AA,BB,CC)将此数据框与另一个数据框合并。
查看完整描述

2 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

unstack 返回具有多索引的序列:

  In [38]: df.unstack()

    Out[38]: 

        date 

    AA  05/03    1

        06/03    4

        07/03    7

        08/03    5

    BB  05/03    2

        06/03    5

        07/03    8

        08/03    7

    CC  05/03    3

        06/03    6

        07/03    9

        08/03    1

    dtype: int64

您可以在返回的序列上调用reset_index:


In [39]: df.unstack().reset_index() 

Out[39]:        


    level_0 date    0

0   AA      05-03   1

1   AA      06-03   4

2   AA      07-03   7

3   AA      08-03   5

4   BB      05-03   2

5   BB      06-03   5

6   BB      07-03   8

7   BB      08-03   7

8   CC      05-03   3

9   CC      06-03   6

10  CC      07-03   9

11  CC      08-03   1

或构造具有多索引的数据框:


In [40]: pd.DataFrame(df.unstack())     

Out[40]:        


            0

    date    

AA  05-03   1

    06-03   4

    07-03   7

    08-03   5

BB  05-03   2

    06-03   5

    07-03   8

    08-03   7

CC  05-03   3

    06-03   6

    07-03   9

    08-03   1


查看完整回答
反对 回复 2019-10-21
?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

使用pandas.melt从宽变长:


df = pd.DataFrame({

    'date' : ['05/03', '06/03', '07/03', '08/03'],

    'AA' : [1, 4, 7, 5],

    'BB' : [2, 5, 8, 7],

    'CC' : [3, 6, 9, 1]

}).set_index('date')

df


        AA  BB  CC

date            

05/03   1   2   3

06/03   4   5   6

07/03   7   8   9

08/03   5   7   1

要进行转换,我们只需要重置索引然后融化:


df = df.reset_index()

pd.melt(df, id_vars='date', value_vars=['AA', 'BB', 'CC'])

这是最终结果:


    date variable value

0   05/03   AA  1

1   06/03   AA  4

2   07/03   AA  7

3   08/03   AA  5

4   05/03   BB  2

5   06/03   BB  5

6   07/03   BB  8

7   08/03   BB  7

8   05/03   CC  3

9   06/03   CC  6

10  07/03   CC  9

11  08/03   CC  1


查看完整回答
反对 回复 2019-10-21
  • 2 回答
  • 0 关注
  • 447 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信