2017-03-19 74 views
0

我想创建不同的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

您可以添加预期的输出吗? –

+0

在正文中完成,谢谢 – progster

回答

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) 

与上述结构相同。

1

不知道你为什么会想这样做,但这里有一个方法:

for i in df.v1.unique(): 
    for x in df.v2.unique(): 
     globals()["df_"+i+"_"+x] = df[(df['v1'] == i) & (df['v2'] == x)] 

有可能是一个数据帧的方法来做到这一点,但我没有用它。

+0

非常好的谢谢!我的最终目标是在实际工作中生成几个Excel报告,每个变量的组合都有一张表。我认为这种方法很有用,但当然我可以向其他人开放 – progster

+0

如果它有帮助,你可以将其标记为回答吗?当我回到电脑前时,我会解答你的问题的第二部分。您不需要为此创建单独的数据框。 –