代码之家  ›  专栏  ›  技术社区  ›  chanbo chung

如何在聚合中获得所有可能的组合

  •  0
  • chanbo chung  · 技术社区  · 1 年前

    我试图使用列列表获得所有可能的组合,以便我可以基于不在列列表中的列I执行聚合函数。

    我能够使用下面的代码单独获取每列的聚合,但在使用多个列时,我很难获得组合。(即('a,'b','i'),('a','c','i')

    我尝试过使用itertools.combination(),但遇到了内存问题,也无法将其转换为数据库。

    我也尝试过使用pd.groupby(),但这只给了我使用每一列的组合,而不是使用列子集的组合。

    columns_loop = ['a','b','c','d','e','f','g','h']
    
    list_of_df = []
    
    for col in columns_loop:
        df2 = df_raw.groupby([col, 'i']).agg(value= ('i', 'count'))
        df = pd.DataFrame(df2)
        df = df.reset_index()
        list_of_df.append(df)
    
    all_df = pd.concat(list_of_df)   
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   Daniel Emakporuena    1 年前

    您可以尝试使用Iter工具进行生成,使用Pandas进行聚合。

    columns_loop = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
        
    list_of_df = []
    
    for r in range(1, len(columns_loop) + 1):
        for combo in itertools.combinations(columns_loop, r):
            df2 = df_raw.groupby(list(combo) + ['i']).agg(value=('i', 'count')).reset_index()
            list_of_df.append(df2)
    
    all_df = pd.concat(list_of_df, ignore_index=True)
    
    import ace_tools as tools; tools.display_dataframe_to_user(name="Aggregated Combinations DataFrame", dataframe=all_df)
    

    这应该生成组合并执行分组和聚合。