如何从 pandas DataFrame 中“取消透视”特定列?
Posted
技术标签:
【中文标题】如何从 pandas DataFrame 中“取消透视”特定列?【英文标题】:How can I "unpivot" specific columns from a pandas DataFrame? 【发布时间】:2014-06-14 18:27:20 【问题描述】:我有一个 pandas DataFrame,例如:
x = DataFrame.from_dict('farm' : ['A','B','A','B'],
'fruit':['apple','apple','pear','pear'],
'2014':[10,12,6,8],
'2015':[11,13,7,9])
即:
2014 2015 farm fruit
0 10 11 A apple
1 12 13 B apple
2 6 7 A pear
3 8 9 B pear
我怎样才能把它转换成这个:?
farm fruit value year
0 A apple 10 2014
1 B apple 12 2014
2 A pear 6 2014
3 B pear 8 2014
4 A apple 11 2015
5 B apple 13 2015
6 A pear 7 2015
7 B pear 9 2015
我已经尝试过stack
和unstack
,但没能成功。
谢谢!
【问题讨论】:
Melt 是这个函数的好名字 【参考方案1】:这可以通过pd.melt()
来完成:
# value_name is 'value' by default, but setting it here to make it clear
pd.melt(x, id_vars=['farm', 'fruit'], var_name='year', value_name='value')
结果:
farm fruit year value
0 A apple 2014 10
1 B apple 2014 12
2 A pear 2014 6
3 B pear 2014 8
4 A apple 2015 11
5 B apple 2015 13
6 A pear 2015 7
7 B pear 2015 9
[8 rows x 4 columns]
我不确定“melt”作为这种操作的名称有多常见,但这就是它在 R 的 reshape2
包中的名称,这可能是此处名称的灵感来源。
【讨论】:
令人难以置信的简单和真棒名字 - 融化!非常感谢! 'melt' 做得非常好。 非常感谢。这正是我想要的。以上是关于如何从 pandas DataFrame 中“取消透视”特定列?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas DataFrame.explode() 后如何创建新的“索引”列?