我正在尝试将以下转换为pandas DataFrame:
源数据帧:
Food Type Eaten 2018-01 Eaten 2018-02 Eaten 2018-03
0 Apple Fruit 3 4 0
1 Pizza Fast Food 2 1 3
2 Cake Desert 3 6 7
目标数据框:
Food Type Month Eaten
0 Apple Fruit 2018-01 3
1 Apple Fruit 2018-02 4
2 Apple Fruit 2018-03 0
3 Pizza Fast Food 2018-01 2
4 Pizza Fast Food 2018-02 1
5 Pizza Fast Food 2018-03 3
6 Cake Desert 2018-01 3
7 Cake Desert 2018-02 6
8 Cake Desert 2018-03 7
目标DataFrame的顺序并不重要。
Date标头本质上会扩展到多行,我们每个月都会收到一个条目,而不是每月一个列
答案 0 :(得分:4)
这是一个典型的wide_to_long
问题
pd.wide_to_long(df,'Eaten ',i=['Food','Type'],j='Month').reset_index()
Out[38]:
Food Type Month Eaten
0 Apple Fruit 2018-01 3
1 Apple Fruit 2018-02 4
2 Apple Fruit 2018-03 0
3 Pizza Fast Food 2018-01 2
4 Pizza Fast Food 2018-02 1
5 Pizza Fast Food 2018-03 3
6 Cake Desert 2018-01 3
7 Cake Desert 2018-02 6
8 Cake Desert 2018-03 7
答案 1 :(得分:1)
我相信融化功能也可以满足此要求。熊猫博士说,wide_to_long更加用户友好,但是melt函数提供了更大的灵活性。融化:
df.melt(id_vars=['Food','Type'],var_name = 'Month', value_name = 'Eaten')
id_vars值表示要保留的列。其余的列将向下旋转。