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