zoukankan      html  css  js  c++  java
  • 【python】Mutilindex多层索引的取值

    一,Mutilindex多层索引的取值

    1. 通过get_list自定义函数创建二维表格数据

    import pandas as pd
    import numpy as np
    
    np.random.seed(123)
    
    def get_list(items,lens = 300):
        return pd.Series(items).sample(n=lens,replace=True).to_list()
    
    df = pd.DataFrame({
        "服装名称": get_list(["T恤","牛仔套装","中国风套装","西装"]),
        "尺码": get_list(["S","M","L"]),
        "平台": get_list(["唯品会","拼多多","淘宝","京东"]),
        "销量": get_list([2,5,8])
    })
    df.head(3)

    2. 通过pivot_table透视表函数统计销量数据。并按照服装名称,平台,尺码指定行跟列的index

    #%%
    
    df = pd.pivot_table(
        df,
        index= ["服装名称"],
        columns= ["平台","尺码"],
        values= "销量",#注意这里统计的只有一个销量,一定不要用列表。
        aggfunc= sum   #对销量做统计
    )
    
    df

    3. 查看DataFrame的index行索引及columns列索引

    #%%
    
    df.index
    
    #%%
    
    df.columns

    4. 对指定列名范围的取值

    注释:这里我们直接把京东这一列包含的所有内容取出来。注意京东这列其实相当于Excel表中的单元格合并。那么下方包含"S","M","L"尺码的三列数据。如果df["京东"]的话会把这三列的值一并取出。

    #%%
    
    #取京东的所有值
    df["京东"]
    
    #%%

    5. 通过掩码条件判断取出数据

    #%%
    
    #取唯品会L型号销量大于30的所有值
    df[df["唯品会"]["L"]>30]
    
    #%%

    6. 每一个columns其实都是一个元组。我们可以通过元组来取出一组或者多组想要的数据

    #%%
    
    #选择单个列数据
    df[('京东', 'S')]
    
    #%%
    
    #选择多列数据(京东平台S码及唯品会平台L码的值)
    df[[('京东', 'S'),('唯品会', 'L')]]
    
    #%%

    7. 通过swaplevel函数指定参数实现列名互换从而实现对数据的筛选

    #%%
    
    #选出所有平台中所有L码的销量值
    df.swaplevel(axis=1)["L"] #swplevel代表交换的意思。axis=1代表0列跟1列互换
    
    #%%

    8. 通过切片实现指定行索引及列索引的数据

    #%%
    
    #通过切片选出京东平台中所有中国风套装的销量
    df.loc["中国风套装":"中国风套装",(["京东"])]
    
    
    #%%

    9. 通过切片对指定行索引及列索引部分数据的切片操作。

    #%%
    
    #选取唯品会及淘宝平台,所有商品的S码和L码的销量值
    df.loc[:,(["唯品会","淘宝"],["S","L"])]
    
    
    
    #%%

    10. 通过slice类对列索引进行切片操作

    注释:slice()中双引号的元素间虽然写的时逗号,但是代表从第一个元素切片到第二个元素的意思。如果中间还包含其他元素,那么也会一并被切片进去。第二个逗号代表第二层指定的值。

    #%%
    
    #通过slice切片来选取唯品会到淘宝的所有M码的数据
    df.loc[:,(slice("唯品会","淘宝"),"M")]
    
    #%%

    11. 通过多层元组的指定对列索引进行数据选取。

    #%%
    
    #也可以通过元祖选择想要选取的列()中的丢个元素代表平台,第二个元素代表尺码
    df.loc[:,[("唯品会","M"),("拼多多","L"),("淘宝","S")]]
    
    #%%

    12. slice函数的使用不光可以对列名,也可以对第二层数据范围中值的指定也同样生效

    #%%
    
    #也可以选择多个平台的多个尺码值
    df.loc[:,(slice("京东","唯品会"),slice("L","S"))]
    
    #%%

    13. 也可以直接对多个列名,类似于列表的方式指定筛选出指定列名下包含的所有数据

    注释:以下方法同上述  df.loc[:,(slice("京东","唯品会"),slice("L","S"))]  其实效果是一样的

    #跟上述方法实现效果其实是一样的
    df.loc[:,["京东","唯品会"]]
    
    #%%

  • 相关阅读:
    最小费用流(km的另一种使用思路)
    最小费用流(km的另一种使用思路)
    Python 字符串格式化
    Python字符串运算符
    Python 字符串连接
    Python 访问字符串中的值
    虚拟纹理与几何图像技术
    深度学习与传统图像识别
    ASML光刻机PK 原子弹,难度?
    L4自动驾驶技术
  • 原文地址:https://www.cnblogs.com/liupengpengg/p/13438630.html
Copyright © 2011-2022 走看看