【问题标题】:What is as_index in groupby in pandas?大熊猫 groupby 中的 as_index 是什么?
【发布时间】:2017-05-05 07:38:15
【问题描述】:

Pandas 中groupby 中的as_index 的作用究竟是什么?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    print() 是你不懂事的朋友。多次打消疑虑。

    看看:

    import pandas as pd
    
    df = pd.DataFrame(data={'books':['bk1','bk1','bk1','bk2','bk2','bk3'], 'price': [12,12,12,15,15,17]})
    
    print(df)
    
    print(df.groupby('books', as_index=True).sum())
    
    print(df.groupby('books', as_index=False).sum())
    

    输出:

      books  price
    0   bk1     12
    1   bk1     12
    2   bk1     12
    3   bk2     15
    4   bk2     15
    5   bk3     17
    
           price
    books       
    bk1       36
    bk2       30
    bk3       17
    
      books  price
    0   bk1     36
    1   bk2     30
    2   bk3     17
    

    as_index=True 您在groupby() 中使用的键将成为新数据帧中的索引。

    将列设置为索引的好处是:

    1. 速度。 当您根据索引列过滤值时,例如。 df.loc['bk1'],由于索引列的散列,它会更快。它不必遍历整个books 列即可找到'bk1'。它只会计算 'bk1' 的哈希值并在 1 go 中找到它。

    2. 轻松。as_index=True 时,您可以使用这种语法df.loc['bk1'],它更短、更快,而df.loc[df.books=='bk1'] 更长、更慢。

      李>

    【讨论】:

    • 非常感谢。我不太了解印刷。
    • @Haritha 这是编程中的一般规则。 print 消除所有引起怀疑的东西。在编程的早期,print 语句被插入到程序中的任何地方来调试错误。如果您认为我已经回答了您的问题,请考虑通过单击两个三角形下方答案左侧的复选标记“✔”来接受它作为答案。
    • 除了容易选择之外,df.loc['bk1'] 也比布尔索引更快。
    • @ayhan 是的。当它被索引时,它不必遍历整个书籍列来找到'bk1'。它只会计算'bk1'的哈希值并在1 go中找到它。感谢您提出这一点。
    【解决方案2】:

    使用 group by 函数时,as_index 可以设置为 true 或 false,具体取决于您是否希望将分组所依据的列作为输出的索引。

    import pandas as pd
    table_r = pd.DataFrame({
        'colors': ['orange', 'red', 'orange', 'red'],
        'price': [1000, 2000, 3000, 4000],
        'quantity': [500, 3000, 3000, 4000],
    })
    new_group = table_r.groupby('colors',as_index=True).count().sort('price', ascending=False)
    print new_group
    

    输出:

            price  quantity
    colors                 
    orange      2         2
    red         2         2
    

    现在 as_index=False

       colors  price  quantity
    0  orange      2         2
    1     red      2         2
    

    注意当我们更改 as_index=False 时颜色不再是索引

    【讨论】:

      【解决方案3】:

      设置as_index = True 的一个限制是它意味着您不能在df.pivot() 方法中使用该列。在调用枢轴之前,您必须将其重置为 False

      df_test = df[['drive-wheels', 'body-style', 'price']]      
      df_group = df_test.groupby(['drive-wheels', 'body-style'], as_index=False).mean() # must be False for the pivot to work
      df_pivot = df_group.pivot(index='drive-wheels', columns='body-style')
      

      【讨论】:

        猜你喜欢
        • 2020-07-09
        • 2019-02-24
        • 1970-01-01
        • 2017-08-14
        • 2022-07-05
        • 1970-01-01
        • 2017-10-05
        • 2020-03-25
        • 1970-01-01
        相关资源
        最近更新 更多