pandas 行列转换总结

pandas 行列转换总结

  • 数据
    • stack、unstack
    • pivot,pivot_table,melt

数据

pandas 行列转换总结_第1张图片
行转列或者列转行的数据一般都是groupby后的数据
b = kd.groupby(by=[“当前网点”, “留仓原因”], as_index=False)[“运单编号”].count()
c = kd.groupby(by=[“当前网点”, “留仓原因”])[“运单编号”].count()
(as_index=False)同groupby后再 reset_index()。
pandas默认groupby后将聚类的特征设置为index。
b和c为两个不同的dateframe,在stack和unstack进行行列转置时转换的实际是index和column,而pivot_table、pivot、melt 转置的是特征的数据。
groupby后的数据
pandas 行列转换总结_第2张图片

stack、unstack

print(bd.set_index(["当前网点", "留仓原因"]).unstack(level=1))

pandas 行列转换总结_第3张图片

print(bd.set_index(["当前网点","留仓原因"]).unstack(level=1).stack())

pandas 行列转换总结_第4张图片

print(bd.set_index(["当前网点","留仓原因"]).unstack(level=1).stack().reset_index())

pandas 行列转换总结_第5张图片

unstack index最外层转到columns最外层,level 控制层
stack columns最外层转到index最外层,level控制层

pivot,pivot_table,melt

print(bd.pivot_table("运单编号",index="当前网点",columns="留仓原因",aggfunc="sum",margins=True,margins_name="总和"))

print(pd.pivot_table(bd,"运单编号", index="当前网点", columns="留仓原因", aggfunc="sum", margins=True, margins_name="总和"))

两种写法效果一致
pandas 行列转换总结_第6张图片
pandas 行列转换总结_第7张图片

   gg=bd.pivot("当前网点","留仓原因","运单编号")
   print(gg)

pandas 行列转换总结_第8张图片
melt的作用类似于stack

   g = pd.melt(g, id_vars=['当前网点'],
             value_vars=['操作原因', '车线衔接原因'],
             var_name='留仓原因', value_name='数量')

pandas 行列转换总结_第9张图片

你可能感兴趣的:(pandas,python)