代码之家  ›  专栏  ›  技术社区  ›  OptimusPrime

如何在for循环中创建多个新数据帧?

  •  1
  • OptimusPrime  · 技术社区  · 6 年前

    我想创建一个不覆盖现有数据帧的for\u循环?

    for df in 2011, 2012, 2013:
           df = pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count')
    

    2011_pivot, 2012_pivot, 2013_pivot
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Sven Harris    6 年前

    我通常不鼓励您创建大量具有相关名称的变量,这在Python中是一种危险的设计模式(尽管在SAS中很常见)。一个更好的选择是创建一个dataframes字典,其中key作为“变量名”

    df_dict = dict()
    for df in 2011, 2012, 2013:
       df_dict["pivot_"+df.name] = pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count')
    

        2
  •  1
  •   Colonder    6 年前

    除了创建数据帧列表或字典之外,我看不到其他方法,您必须手动命名它们。

    df_list = [pd.pivot_table(df, index=["income"], columns=["area"], values=["id"], aggfunc='count') for df in 2011, 2012, 2013]
    

    here .

        3
  •  0
  •   jpp    6 年前

    dict list 相反,例如通过字典或列表理解。

    MultiIndex 列和单个 pd.pivot_table 电话:

    dfs = {2011: df_2011, 2012: df_2012, 2013: df_2013}
    comb = pd.concat([v.assign(year=k) for k, v in dfs.items()], ignore_index=True)
    
    df = pd.pivot_table(comb, index='income', columns=['year', 'area'],
                        values='id', aggfunc='count')
    

    pivot_2011 = df.iloc[:, df.columns.get_level_values(0).eq(2011)]