pandas melt 与pivot 函数

(掌握这个,基本就完美无缺的任意按照自己的想法,更改列了。)

背景:

最近有个excel 数据需要转化的过程。 数据量还挺大的,大概有30多万。 需要把某些行变成列,有些列又变成行。 这个操作本身就比较烦躁。

更何况数据量达到了几十万的情况下, excel 基本就卡死了。

1 把城市合为一列

2 将空气类型type 分开为成为列

 先贴样本:

扫描二维码关注公众号,回复: 8062408 查看本文章

转化后的结果:

  苦恼了很久。

实践:

  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

猜你喜欢

转载自www.cnblogs.com/sakura3/p/11979041.html