对于以下熊猫数据框:
定义:
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。 我该如何调整重塑效果?
答案 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
编辑: 首先重命名标题是正确的方法