Pandas - 列标题到行值

我正在尝试对 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 的顺序并不重要。


日期标题本质上被扩展为多行,我们每月获得一个条目而不是每月一列


互换的青春
浏览 208回答 2
2回答

蓝山帝景

这是一个典型的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       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

Cats萌萌

相信melt函数也满足这一点。Pandas doc 说 wide_to_long 对用户更友好,但melt 函数允许更大的灵活性。用熔体:df.melt(id_vars=['Food','Type'],var_name = 'Month', value_name = 'Eaten')id_vars 值表示您希望保留哪些列。其余列将向下旋转。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python