我想创建不同的df,一个用于两个变量的每个可能组合(两个变量都有3个项目,因此组合为9个。)
每个df都应根据变量的值命名,例如df_A_N。
这是我的意图,但我无法指定名称或概括为更多变量:
df = pd.DataFrame({'v1': pd.Categorical(["A","A","AA","AAA"]),'v2': pd.Categorical(["N","N","W","E"])})
df
n = []
for i in df.v1:
if i not in n:
n.append(i)
print (n)
for i in n:
df_new=df[df.v1==i]
df_new
df_new_A_N = pd.DataFrame({'v1':pd.Categorical([“A”]),'v2':pd.Categorical([“N”])})
df_new_A_W = pd.DataFrame({'v1':pd.Categorical([“A”]),'v2':pd.Categorical([“W”])})
答案 0 :(得分:1)
不知道你为什么要这样做,但这只是一种方式:
for i in df.v1.unique():
for x in df.v2.unique():
globals()["df_"+i+"_"+x] = df[(df['v1'] == i) & (df['v2'] == x)]
可能有一种DataFrame方法可以做到这一点,但我还没有使用它。
答案 1 :(得分:1)
您需要使用ExcelWriter在一个文档中保存多个工作表(据我所知)。要解决问题的第二部分,请尝试以下方法:
writer = pd.ExcelWriter(r"/yourpath/excel_doc.xlsx")
for i in df.v1.unique():
for x in df.v2.unique():
temp = df[(df['v1'] == i) & (df['v2'] == x)]
temp.to_excel(writer, "df_"+i+"_"+x)
与上述结构相同。