寻找python解决方案。需要帮助在python中取消数据帧的旋转。这个结构对于一个基本的枢轴函数来说有点古怪,因为我想要重塑它。
当前数据框架-以下是我所拥有的
ABC Mechanical
Standard 15-Day 10-Day 5-Day
Terminal Units 0.49 0.75 0.69 0.63
Diffusers 0.35 0.55 0.45 0.4
Vent 0.8 0.95 0.9 0.85
Piping 0.7 0.85 0.8 0.75
Stoves 0.6 0.8 0.75 0.7UNPIVOTED数据框架--以下是我想要重塑它的方式
df.columns= Customer, Product Category, Ship Cycle, Multiplier
df.index= ABC Mechanical
Customer Product Category Ship Cycle Multiplier
ABC Mechanical Terminal Units Standard 0.49
ABC Mechanical Terminal Units 15-Day 0.75
ABC Mechanical Terminal Units 10-Day 0.69
ABC Mechanical Terminal Units 5-Day 0.63
ABC Mechanical Diffusers Standard 0.35
ABC Mechanical Diffusers 15-Day 0.55
ABC Mechanical Diffusers 10-Day 0.45
ABC Mechanical Diffusers 5-Day 0.4任何帮助都是非常感谢的!
谢谢!
发布于 2014-10-29 21:08:51
如果df看起来像这样:
In [26]: df
Out[26]:
Standard 15-Day 10-Day 5-Day
Terminal Units 0.49 0.75 0.69 0.63
Diffusers 0.35 0.55 0.45 0.40
Vent 0.80 0.95 0.90 0.85
Piping 0.70 0.85 0.80 0.75
Stoves 0.60 0.80 0.75 0.70然后,pd.melt使您接近所需的DataFrame:
In [27]: pd.melt(df.reset_index(), id_vars=['index']).sort_values(by=['index'])
Out[27]:
index variable value
1 Diffusers Standard 0.35
6 Diffusers 15-Day 0.55
11 Diffusers 10-Day 0.45
16 Diffusers 5-Day 0.40
3 Piping Standard 0.70
8 Piping 15-Day 0.85
13 Piping 10-Day 0.80
18 Piping 5-Day 0.75
4 Stoves Standard 0.60
9 Stoves 15-Day 0.80
14 Stoves 10-Day 0.75
19 Stoves 5-Day 0.70
0 Terminal Units Standard 0.49
5 Terminal Units 15-Day 0.75
10 Terminal Units 10-Day 0.69
15 Terminal Units 5-Day 0.63
2 Vent Standard 0.80
7 Vent 15-Day 0.95
12 Vent 10-Day 0.90
17 Vent 5-Day 0.85我不明白"ABC机械“在原始DataFrame中的位置,所以我没有尝试将它包括在结果中。列名可以重命名如下:
In [28]: df = pd.melt(df.reset_index(), id_vars=['index']).sort_values(by=['index'])
In [29]: df.columns = ['Product Category', 'Ship Cycle', 'Multiplier']
In [31]: df.head()
Out[31]:
Product Category Ship Cycle Multiplier
1 Diffusers Standard 0.35
6 Diffusers 15-Day 0.55
11 Diffusers 10-Day 0.45
16 Diffusers 5-Day 0.40
3 Piping Standard 0.70发布于 2014-10-29 21:11:49
或者您可以使用unstack()
In [41]:
print df
Standard 15-Day 10-Day 5-Day
Terminal_Units 0.49 0.75 0.69 0.63
Diffusers 0.35 0.55 0.45 0.40
Vent 0.80 0.95 0.90 0.85
Piping 0.70 0.85 0.80 0.75
Stoves 0.60 0.80 0.75 0.70
In [42]:
df2 = df.stack().reset_index()
df2.columns = ['Product Category', 'Ship Cycle', 'Multiplier']
df2['Customer'] = 'ABC Mechanical'
In [43]:
print df2.icol([3,0,1,2])
Customer Product Category Ship Cycle Multiplier
0 ABC Mechanical Terminal_Units Standard 0.49
1 ABC Mechanical Terminal_Units 15-Day 0.75
2 ABC Mechanical Terminal_Units 10-Day 0.69
3 ABC Mechanical Terminal_Units 5-Day 0.63
4 ABC Mechanical Diffusers Standard 0.35
5 ABC Mechanical Diffusers 15-Day 0.55
6 ABC Mechanical Diffusers 10-Day 0.45
7 ABC Mechanical Diffusers 5-Day 0.40
8 ABC Mechanical Vent Standard 0.80
9 ABC Mechanical Vent 15-Day 0.95
10 ABC Mechanical Vent 10-Day 0.90
11 ABC Mechanical Vent 5-Day 0.85
12 ABC Mechanical Piping Standard 0.70
13 ABC Mechanical Piping 15-Day 0.85
14 ABC Mechanical Piping 10-Day 0.80
15 ABC Mechanical Piping 5-Day 0.75
16 ABC Mechanical Stoves Standard 0.60
17 ABC Mechanical Stoves 15-Day 0.80
18 ABC Mechanical Stoves 10-Day 0.75
19 ABC Mechanical Stoves 5-Day 0.70https://stackoverflow.com/questions/26639003
复制相似问题