pandas 行列轉換總結

2021-09-03 01:12:56 字數 1874 閱讀 1395

行轉列或者列轉行的資料一般都是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後的資料

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控制層

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("當前網點","留倉原因","運單編號")

melt的作用類似於stack

g = pd.melt(g, id_vars=['當前網點'],

value_vars=['操作原因', '車線銜接原因'],

var_name='留倉原因', value_name='數量')

oracle 行列轉換 總結

oracle行列轉換小結 目錄結構如下 行轉列列轉行 一 行轉列 1.1 初始測試資料 表結構 test tb grade sql create table test tb grade id number 10 not null,user name varchar2 20 char course v...

hive行列轉換總結

具體思路需要根據資料來定,常見的解決方法如下 1 使用case when 查詢出多列即可,即可增加列。或者2.轉成陣列或者集合後 乙個乙個的取值 不就變成一列了 乙個字段 多個取值 變成多列 多列變一列 select concat str1,str2,str3 from 表 concat可以帶多個引...

Pandas行 列選擇

總也記不住的行列選擇 import pandas as pd dataname price time data pd.read csv test.csv 切片 a b 索引 iloc iloc適用於資料進行了篩選後造成索引號與原來不一致的情況 data.iloc 1 data.iloc 1 pric...