从数据框中仅转置少数列和行

4
我正在寻找一种方法,仅转置数据框中的某些列及其值,并保持起始列不变。
输入框架:
Type    Class   24/01/2018  25/01/2018  26/01/2018
Plant1  Plant   5498    5998    5815
Plant2  Plant   3416    4844    4991
Veg1    Vegetable   5426    5464    3756
Veg2    Vegetable   5317    4616    7528

输出帧:
Type    Class   Value   Date
Plant1  Plant   5498    24/01/2018
Plant1  Plant   5998    25/01/2018
Plant1  Plant   5815    26/01/2018
Veg1    Vegetable   5426    24/01/2018
Veg1    Vegetable   5464    25/01/2018
Veg1    Vegetable   3756    26/01/2018

我通常在Excel中完成这个任务,尝试使用Pandas的数据透视表功能,但无法想出如何实现。有人能帮我提供一些指导吗?
谢谢。
1个回答

13

融化

df.melt(['Type', 'Class'], var_name='Date', value_name='Value')

      Type      Class        Date  Value
0   Plant1      Plant  24/01/2018   5498
1   Plant2      Plant  24/01/2018   3416
2     Veg1  Vegetable  24/01/2018   5426
3     Veg2  Vegetable  24/01/2018   5317
4   Plant1      Plant  25/01/2018   5998
5   Plant2      Plant  25/01/2018   4844
6     Veg1  Vegetable  25/01/2018   5464
7     Veg2  Vegetable  25/01/2018   4616
8   Plant1      Plant  26/01/2018   5815
9   Plant2      Plant  26/01/2018   4991
10    Veg1  Vegetable  26/01/2018   3756
11    Veg2  Vegetable  26/01/2018   7528

set_index + stack

(df.set_index(['Type', 'Class'])
   .stack()
   .rename_axis(['Type', 'Class', 'Date'])
   .reset_index(name='Value')
)

      Type      Class        Date  Value
0   Plant1      Plant  24/01/2018   5498
1   Plant1      Plant  25/01/2018   5998
2   Plant1      Plant  26/01/2018   5815
3   Plant2      Plant  24/01/2018   3416
4   Plant2      Plant  25/01/2018   4844
5   Plant2      Plant  26/01/2018   4991
6     Veg1  Vegetable  24/01/2018   5426
7     Veg1  Vegetable  25/01/2018   5464
8     Veg1  Vegetable  26/01/2018   3756
9     Veg2  Vegetable  24/01/2018   5317
10    Veg2  Vegetable  25/01/2018   4616
11    Veg2  Vegetable  26/01/2018   7528

1
非常好!谢谢。 - Shahrukh Khalidi
请分享完整的脚本。 - Nisha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接