(掌握這個,基本就完美無缺的任意按照自己的想法,更改列了。)
背景:
最近有個excel 數據需要轉化的過程。 數據量還挺大的,大概有30多萬。 需要把某些行變成列,有些列又變成行。 這個操作本身就比較煩躁。
更何況數據量達到了幾十萬的情況下, excel 基本就卡死了。
1 把城市合為一列
2 將空氣類型type 分開為成為列
先貼樣本:
轉化后的結果:
苦惱了很久。
實踐:
melt 函數講解,
frame, -- 需要處理的數據集
id_vars=None, -- 不需要改變的列
value_vars=None,--需要轉換的列名,如果剩下的列全部都要轉換,就不用寫了
var_name=None, --設置對應的維度名
value_name="value", -- 設置對應的度量值名
col_level=None, -- 不知道
first_data_2 = self.pd.melt(deal_data, id_vars=['date', 'hour', 'type'], value_vars=city_data, var_name='city', value_name='count_clue').fillna(0)
在這里, deal_data 是需要處理數據集, id_vars 不變的列, date , hour, type , 需要轉化的列 數組city_data [] , 理論上應該是不用填,下面全部轉化。
對應的維度名:city , 對應合起來的度量值。count_clue。
這樣就把列都合起來了 。
結果展示
然后我們用piovt 函數,把它列 type 同樣列 轉變成行。
first_data_3 = self.pd.DataFrame( self.pd.pivot_table(first_data_2, index=['date', 'hour', 'city', ], columns='type', values='count_clue'))
piovt_table ,我懂的太少了。都是照抄的
貼個鏈接, 以我的理解, index 是需要的列,然后columns 就是要展開的列, value 是要展開的值,就這樣。
https://zhuanlan.zhihu.com/p/31952948