【问题标题】:Loop through pandas grouped data index循环遍历 pandas 分组数据索引
【发布时间】:2018-04-26 17:23:07
【问题描述】:

苦苦挣扎的新手,我们正在尝试列出分组数据框的项目。 要突出问题,请参阅下面的简化示例。 首先对项目进行分组:

data = {'colour': ['red','purple','green','purple','blue','red'], 'item': ['hat','scarf','belt','belt','hat','scarf'], 'material': ['felt','wool','leather','wool','plastic','wool']}  
df = pd.DataFrame(data=data)
grpd_df = df.groupby(df['item']).apply(lambda df:df.reset_index(drop=True))
grpd_df

          colour  item material
item

belt   0  green   belt  leather 
       1 purple  belt  wool 

hat    0 red     hat   felt 
       1 blue    hat   plastic 

scarf  0 purple  scarf wool 
       1 red     scarf wool 

然后找到所有有红色项的行

df = grpd_df[grpd_df['colour'].eq('red').groupby(level=0).transform('any')]
print (df)

          colour   item material
item                           
hat    0     red    hat     felt
       1    blue    hat  plastic
scarf  0  purple  scarf     wool
       1     red  scarf     wool

然后我们想循环遍历 grpd_df 中的项目列表,即帽子和围巾。我们尝试了df.index.levels,但这会输出包括腰带在内的所有项目。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用IndexSliceget_level_values来实现它。

    grpd_df.loc[pd.IndexSlice[list(set(df.index.get_level_values(0).tolist())),:]]
    Out[302]: 
             colour   item material
    item                           
    hat   0     red    hat     felt
          1    blue    hat  plastic
    scarf 0  purple  scarf     wool
          1     red  scarf     wool
    

    如果需要来自df的索引级别

    set(df.index.get_level_values(0).tolist())
    Out[303]: {'hat', 'scarf'}
    

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      相关资源
      最近更新 更多