pandas 列转行 melt stack

一、
列转行df.melt
原始数据是形如

第一列是纳税号,后面的列是每个月,现在进行列转行
df.melt(id_vars=['taxpayer_no'],var_name='date',value_name='value')
转出来,形如:


二、
stack
stack也能实现列转行,stack会把所有column加入到row中,和当前的index组成multiindex,所以用stack的话,就有以下几个步骤:
1.把id column设为index
2.做stack
3.reset_index并重命名column name

Demo如下:
df = pd.DataFrame({'id':[1,2,3],'b':[4,5,6],'c':[7,8,9]})
df = df.set_index('id')
df = df.stack().reset_index().rename(columns={'level_1':'date',0:'value'})
stack后value字段的name是0,reset_index后var字段的name是level_1(level 1索引的意思),所以还需要重命名,实际上melt的功能都可以由stack来实现。








留言

熱門文章