在迭代多索引数据帧时获取索引

时间:2021-03-03 10:05:06

标签: pandas multi-index

在迭代 shop_id 时,我试图在多索引 DataFrame 中获取 shop_id 值:

                         total_sales
shop_id date_block_num              
0       0               3.034985e+09
        1               3.547803e+09

所以我尝试了:

for i, shop_sales in monthly_change.groupby(level=0):
    print(shop_sales['shop_id'])

但它返回了一个关键错误。

我也试过 shop_sales.index,但我不明白如何使用结果

MultiIndex([(0, 0),
            (0, 1)],
           names=['shop_id', 'date_block_num'])

2 个答案:

答案 0 :(得分:0)

如果需要第一级或第二级 MultiIndex,请使用 Index.get_level_values

for i, shop_sales in monthly_change.groupby(level=0):
    #grouping by first level, so get scalar 
    print(i)
    #if need first level of MultiIndex
    print (monthly_change.index.get_level_values('shop_id'))
    
    #if need second level of MultiIndex
    print (monthly_change.index.get_level_values('date_block_num'))
    
0
Int64Index([0, 0], dtype='int64', name='shop_id')
Int64Index([0, 1], dtype='int64', name='date_block_num')

答案 1 :(得分:0)

不,它不起作用,因为您尝试获取列shop_id,但是在groupby 之后,它已成为索引,因此不会引发错误:

for i, shop_sales in monthly_change.groupby(level=0):
    print(shop_sales.reset_index()['shop_id'])

但我真的不明白你想做什么...... 这可能吗?

for shop in monthly_change.index.get_level_values(0):
    print(monthly_change.loc[shop])

或者更简单的:

monthly_change.loc[0]

要得到 shop_id == 0 吗?