将一个数据框拆分为多个数据框

时间:2019-01-07 16:05:22

标签: pandas

我有一个数据框;我使用groupby将其拆分。我了解这会将数据帧拆分为多个数据帧。如何根据组取回这些单独的数据框并相应命名?因此,如果说df.groupby(['A','B']) 并且A具有值A1,B具有值B1-B4,我想取回这四个数据帧callefdf_A1B1..df_A1B1,df_A1B2 ... df_A1B4?

2 个答案:

答案 0 :(得分:4)

这可以通过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

使用字典是正确的方法

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

答案 1 :(得分:0)

使用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