我正在尝试对 Pandas DataFrame 进行以下转换:源数据帧: Food Type Eaten 2018-01 Eaten 2018-02 Eaten 2018-030 Apple Fruit 3 4 01 Pizza Fast Food 2 1 32 Cake Desert 3 6 7目标数据帧: Food Type Month Eaten0 Apple Fruit 2018-01 31 Apple Fruit 2018-02 42 Apple Fruit 2018-03 03 Pizza Fast Food 2018-01 24 Pizza Fast Food 2018-02 15 Pizza Fast Food 2018-03 36 Cake Desert 2018-01 37 Cake Desert 2018-02 68 Cake Desert 2018-03 7目标 DataFrame 的顺序并不重要。日期标题本质上被扩展为多行,我们每月获得一个条目而不是每月一列
2 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
这是一个典型的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
Cats萌萌
TA贡献1805条经验 获得超9个赞
相信melt函数也满足这一点。Pandas doc 说 wide_to_long 对用户更友好,但melt 函数允许更大的灵活性。用熔体:
df.melt(id_vars=['Food','Type'],var_name = 'Month', value_name = 'Eaten')
id_vars 值表示您希望保留哪些列。其余列将向下旋转。
添加回答
举报
0/150
提交
取消