pandas 行列转换总结
pandas 行列转换总结
数据
行转列或者列转行的数据一般都是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后的数据
stack、unstack
print(bd.set_index(["当前网点", "留仓原因"]).unstack(level=1))
print(bd.set_index(["当前网点","留仓原因"]).unstack(level=1).stack())
print(bd.set_index(["当前网点","留仓原因"]).unstack(level=1).stack().reset_index())
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="总和"))
两种写法效果一致
gg=bd.pivot("当前网点","留仓原因","运单编号")
print(gg)
melt的作用类似于stack
g = pd.melt(g, id_vars=['当前网点'],
value_vars=['操作原因', '车线衔接原因'],
var_name='留仓原因', value_name='数量')