熊猫重塑多列失败,出现KeyError

时间:2020-02-24 13:25:10

标签: python pandas

对于以下熊猫数据框:

enter image description here

定义:

import pandas as pd
df = pd.DataFrame({'id':[1,2,3], 're_foo':[1,2,3], 're_bar':[4,5,6], 're_foo_baz':[0.4, 0.8, .9], 're_bar_baz':[.4,.5,.6], 'iteration':[1,2,3]})
display(df)

我想重塑为以下格式:

id, metric, value, iteration
1, foo    , 1    , 1
1, bar    , 4    , 1
1, foo_baz, 0.4  , 1
1, bar_baz, 0.4  , 0.4
...

A:

pd.wide_to_long(r, stubnames='re', i=['re_foo', 're_bar', 're_foo_baz', 're_bar_baz'], j='metric')

仅导致KeyError。 我该如何调整重塑效果?

2 个答案:

答案 0 :(得分:1)

这是使用stack的一种方式:

# fix column name, remove re_
df.columns = df.columns.str.replace(r're_', '')

# reshape dataframe into required format
df = df.set_index(['id','iteration']).stack().reset_index().rename(columns={'level_2':'metric', 0: 'value'})

    id  iteration   metric  value
0    1          1      foo    1.0
1    1          1      bar    4.0
2    1          1  foo_baz    0.4
3    1          1  bar_baz    0.4
4    2          2      foo    2.0
5    2          2      bar    5.0
6    2          2  foo_baz    0.8
7    2          2  bar_baz    0.5
8    3          3      foo    3.0
9    3          3      bar    6.0
10   3          3  foo_baz    0.9
11   3          3  bar_baz    0.6

答案 1 :(得分:0)

您可以使用pandas.melt并按id排序

df1 = df.melt(id_vars=['id', 'iteration'], 
              var_name="matric").sort_values(by=['id'])
df1.matric = df1.matric.str.replace('re_','')

>>>
    id  iteration   matric  value
0    1          1      foo    1.0
3    1          1      bar    4.0
6    1          1  foo_baz    0.4
9    1          1  bar_baz    0.4
1    2          2      foo    2.0
4    2          2      bar    5.0
7    2          2  foo_baz    0.8
10   2          2  bar_baz    0.5
2    3          3      foo    3.0
5    3          3      bar    6.0
8    3          3  foo_baz    0.9
11   3          3  bar_baz    0.6

编辑: 首先重命名标题是正确的方法