Pandas:将列名转换为行值
Pandas: transform column names to row values
我正在尝试在 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 的顺序并不重要。
这是一个典型的 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
相信 melt 函数也能满足这一点。 Pandas 文档说 wide_to_long 对用户更友好,但 melt 函数允许更大的灵活性。随着融化:
df.melt(id_vars=['Food','Type'],var_name = 'Month', value_name = 'Eaten')
id_vars 值表示您要保留的列。其余列将向下旋转。
我正在尝试在 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 的顺序并不重要。
这是一个典型的 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
相信 melt 函数也能满足这一点。 Pandas 文档说 wide_to_long 对用户更友好,但 melt 函数允许更大的灵活性。随着融化:
df.melt(id_vars=['Food','Type'],var_name = 'Month', value_name = 'Eaten')
id_vars 值表示您要保留的列。其余列将向下旋转。