【发布时间】: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
我有一个数据框;我使用 groupby 拆分它。我知道这会将数据帧拆分为多个数据帧。如何根据组取回那些单独的数据框并相应地命名它们?所以如果说 df.groupby(['A','B']) A 的值为 A1,B 的值为 B1-B4,我想取回这 4 个数据帧 callefdf_A1B1..df_A1B1, df_A1B2...df_A1B4?
【问题讨论】:
标签: pandas
这个可以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'])}
【讨论】:
提供替代解决方案,使用 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
【讨论】: