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

来源:互联网 发布:windows xp怎么升级 编辑:程序博客网 时间:2024/05/21 21:43

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

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  numbers0      北京市  11   M   3183801      北京市  11   F   1674212      北京市  11        253433      北京市  11   N      1154      天津市  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      Nprovince                                    上海市           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_tablegood_data_4.pivot_table(index='zxs',columns='sex',values='numbers',aggfunc=sum)Out[432]: sex                 F         M     Nzxs                                  直辖市    25343   625445   1151071   301非直辖市  559508  5627190  10761872  2895#group_bygood_data_4.groupby(['zxs','sex']).sum()Out[433]:            numberszxs  sex          直辖市          25343     F      625445     M     1151071     N         301非直辖市        559508     F     5627190     M    10761872     N        2895