【问题标题】:Split a dataframe into multiple dataframes将一个数据帧拆分为多个数据帧
【发布时间】:2019-01-07 16:05:21
【问题描述】:

我有一个数据框;我使用 groupby 拆分它。我知道这会将数据帧拆分为多个数据帧。如何根据组取回那些单独的数据框并相应地命名它们?所以如果说 df.groupby(['A','B']) A 的值为 A1,B 的值为 B1-B4,我想取回这 4 个数据帧 callefdf_A1B1..df_A1B1, df_A1B2...df_A1B4?

【问题讨论】:

    标签: pandas


    【解决方案1】:

    这个可以locals做但是不推荐

    variables = locals()
    for i,j in df.groupby(['A','B']):
        variables["df_{0[0]}{0[1]}".format(i)] = j
    df_01
    Out[332]: 
       A  B              C
    0  0  1  a-1524112-124
    

    使用dict是正确的方法

    {"df_{0[0]}{0[1]}".format(i) : j for i,j in df.groupby(['A','B'])}
    

    【讨论】:

    • 非常感谢。将这些单独的数据框写入 excel 的最佳方法是什么,保持 excel 名称与数据框名称相同?
    • @Victor 类似于 ` 'd={"df_{0[0]}{0[1]}".format(i) : j for i,j in df.groupby([' A','B'])}''for x, y in d.items(): y.to_csv(x + '.csv')`
    【解决方案2】:

    提供替代解决方案,使用 pandas.DataFrame.xs 和一些 exec 魔法 -

    df = pd.DataFrame({'A': ['a1', 'a2']*4,
        'B': ['b1', 'b2', 'b3', 'b4']*2,
        'val': [i for i in range(8)]
    })
    
    df
    #    A   B  val
    # 0  a1  b1    0
    # 1  a2  b2    1
    # 2  a1  b3    2
    # 3  a2  b4    3
    # 4  a1  b1    4
    # 5  a2  b2    5
    # 6  a1  b3    6
    # 7  a2  b4    7
    
    for i in df.set_index(['A', 'B']).index.unique().tolist():
         exec("df_{}{}".format(i[0], i[1]) + " = df.set_index(['A','B']).xs(i)")
    
    df_a1b1
    #        val
    # A  B
    # a1 b1    0
    #    b1    4
    

    【讨论】:

      猜你喜欢
      • 2019-05-31
      • 2013-11-16
      相关资源
      最近更新 更多