数据的重塑

重塑层次化索引stack()

DataFrame.stack(level=-1, dropna=True)

上面参数含义如下:

level:表示操作内层索引,若设为0表示操作外层索引。

dropna:表示是否将旋转后的缺失值删除,若设为True,则表示自动过滤缺失值,如果为False则相反。

df = pd.DataFrame({'A':['A0','A1','A2'],
                  'B':['B0','B1','B2']})
print(df)
​
print(df.stack(level=-1,dropna=True))   # 尝试内层索引
​
print(df.stack(level=0,dropna=True))     # 尝试外层索引
​
print(type(df.stack()))
​
res = df.stack()
print(res)
​
res.unstack()   # 将数据转换回去
​
​
-------------------------------------下面是输出结果---------------------------------------
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
------------------------------------
0  A    A0
   B    B0
1  A    A1
   B    B1
2  A    A2
   B    B2
dtype: object
------------------------------------
0  A    A0
   B    B0
1  A    A1
   B    B1
2  A    A2
   B    B2
dtype: object
------------------------------------
<class 'pandas.core.series.Series'>
------------------------------------
0  A    A0
   B    B0
1  A    A1
   B    B1
2  A    A2
   B    B2
dtype: object
------------------------------------
    A   B
0   A0  B0
1   A1  B1
2   A2  B2

下面是多层索引设的重塑

重塑内层索引图

重塑外层索引图

下面是代码

df = pd.DataFrame(np.array([[26,20,22,26],[30,25,24,20]]),  # 这里也可以不写np.array(),直接一个二维数组
                  index = ['男生人数','女生人数'],
                  columns = [['一楼','一楼','二楼','二楼'],
                 ['A教室','B教室','A教室','B教室']])
                 
print(df)
print(df.stack(level=-1))
df.stack(level=0)
​
----------------------------------下面是输出结果-----------------------------------
             一楼          二楼    
         A教室   B教室  A教室  B教室
男生人数   26      20     22   26
女生人数   30      25     24   20
-----------------------------------------
               一楼   二楼
男生人数  A教室    26   22
         B教室    20   26
女生人数  A教室    30   24
         B教室    25   20
-----------------------------------------
                A教室  B教室
男生人数    一楼   26   20
           二楼   22   26
女生人数    一楼   30   25
           二楼   24   20

轴向旋转pivot()

在pandas中,pivot()提供了这样的功能,它会根据给定的行索引或列索引重新组织一个DataFrame对象

DataFrame.pivot(index=None, columns=None, values=None)

index:用于创建新DataFrame对象的行索引,如果未设置,则使用原DataFrame对象的索引

columns:用于创建新DataFrame对象的列索引,如果未设置,则使用原DataFrame对象的索引

value:用于填充新DataFrame对象的中的值

下面是轴转向代码

df = pd.DataFrame({'商品名称':['荣耀9青春版','小米6x','OPPO A1','荣耀9青春版','小米6x','OPPO A1'],
                  '出售日期':['2017年5月25日','2017年5月25日','2017年5月25日','2017年6月8日','2017年6月8日','2017年6月8日'],
                  '价格':['999元','1399元','1399元','800元','1200元','1250元']})
​
print(df)
df.pivot(index='出售日期',columns='商品名称',values='价格')
​
--------------------------------下面是输出结果-----------------------------------
      商品名称        出售日期        价格
0   荣耀9青春版      2017年5月25日    999元
1   小米6x          2017年5月25日     1399元
2   OPPO A1        2017年5月25日      1399元
3   荣耀9青春版      2017年6月8日     800元
4   小米6x          2017年6月8日      1200元
5   OPPO A1        2017年6月8日       1250元
---------------------------------------------------
商品名称       OPPO A1  小米6x    荣耀9青春版
出售日期            
2017年5月25日  1399元   1399元    999元
2017年6月8日   1250元   1200元    800元

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值