循环以根据变量的值分割数据帧

时间:2017-03-19 11:33:30

标签: python pandas for-loop

我想创建不同的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”])})

2 个答案:

答案 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)

与上述结构相同。