使用exec()定义具有从现有变量名称派生的名称的新变量

时间:2020-04-03 08:39:20

标签: python python-3.x dataframe data-analysis

我有一个DataFrame(称为df)对象,其列名为A,B和C,其中C是二进制变量。我正在尝试在循环中创建新变量A_1,A_0,B_1和B_0。这些变量是根据C的值创建的。例如A_0是我原始列A的一部分,其中C的对应值为0。

以下代码满足了我的需要:

variables=list('A', 'B')
for v in variables:
    exec(f'{v}_0, {v}_1 = df.groupby("C")["{v}"]') #this returns a tuple
    exec(f'{v}_0, {v}_1 = {v}_0[1], {v}_1[1]') #this returns what i need

这很笨拙,据我所知,exec()是一种不好的做法。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

只需使用字典即可​​。

data = {}
for v in ["A", "B"]:
    a, b = df.groupby("C")[v]
    data[v] = (a[1], b[1])

编辑:如注释中所述,创建键V_0V_1

data = {}
for v in ["A", "B"]:
    a, b = df.groupby("C")[v]
    data[f"{v}_0"] = a[1]
    data[f"{v}_1"] = b[1]