数据重塑,以及长宽数据的相互转化

数据重塑,以及长宽数据的相互转化

stack 和 unstack方法

  • 二重MultiIndex的Series可以unstack()成DataFrame。长数据变宽。

  • DataFrame可以stack成拥有二重MultiIndex的Series。如果是普通的多列 DataFrame ,调用一次 stack 后就会变成 Series 了。宽数据变长。

  • good_data_4.stack().unstack() #恢复了原来的样子

pivot方法

good_data_4.head()
Out[411]: 
  province  id sex  numbers
0      北京市  11   M   318380
1      北京市  11   F   167421
2      北京市  11        25343
3      北京市  11   N      115
4      天津市  12   M   216825
good_frame=pd.DataFrame(good_data_4.pivot(index='province',columns='sex',values='numbers').fillna(0)) # value 是关心的值,columns和index共同锁定了value的值。
good_frame.head()
Out[412]: 
sex            Na         F         M      N
province                                    
上海市           0.0  314555.0  576499.0  186.0
云南省        4899.0   53330.0   87002.0    0.0
内蒙古自治区    15038.0  138461.0  257813.0    0.0
北京市       25343.0  167421.0  318380.0  115.0
台湾省           0.0    1260.0    4516.0    0.0

pivot_table / groupby 方法

pivot 指定了新的index,如果是分组再应用函数,可使用pivot_table / groupby 。

#创建新的属性
mapping={
        '北京市':'直辖市',
        '天津市':'直辖市',
        '上海市':'直辖市',
        '重庆市':'直辖市'
        }
f=lambda x : mapping.get(x, '非直辖市')
good_data_4['zxs']=good_data_4.province.map(f)
good_data_4.head()

#pivot_table
good_data_4.pivot_table(index='zxs',columns='sex',values='numbers',aggfunc=sum)
Out[432]: 
sex                 F         M     N
zxs                                  
直辖市    25343   625445   1151071   301
非直辖市  559508  5627190  10761872  2895

#group_by
good_data_4.groupby(['zxs','sex']).sum()
Out[433]: 
           numbers
zxs  sex          
直辖市          25343
     F      625445
     M     1151071
     N         301
非直辖市        559508
     F     5627190
     M    10761872
     N        2895
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值