在Python中循环创建和覆盖数据框(列表)

时间:2017-11-19 18:38:14

标签: python list pandas

这是我早期问题的有力简化:)

有4个列表(在我的例子中,值是整数):

e00 = [AB, CA]
e01 = [BD, FK]
e10 = [AC, DF]
e11 = [DE, FB]

下:

a = input('Write a binary number. \n')

    b = []
    for i in range(len(a)-1):
        c = a[i:i+2]
        b.append(c)

例如,对于字符串00101,我得到:

b = ['00', '01', '10', '01']

阶段:

  1. 我选择列表'b'中的前两个值,即'00''01'
  2. 因此,我将使用列表e00e01
  3. 我比较了上面的列表。我的代码只适用于这种情况:

    a00 = pd.DataFrame({'A':e00})
    a01 = pd.DataFrame({'B':e01})
    a10 = pd.DataFrame({'C':e10})
    a11 = pd.DataFrame({'D':e11})
    
        b = []
        for i in range(len(a)-1):
            c = a[i:i+2]
            b.append(c)
    
    if b[0]=='00':
       if b[1]=='01':
    
           m001 = a00.assign(x=a00.A.str[-1]).merge(a01.assign(x=a01.B.str[0], B=a01.B.str[1:]))
    
           v = (m001['A'] + m001['B'])
           v.str.len() == v.apply(set).str.len()
           c=v[v.str.len() == v.apply(set).str.len()].tolist()
    
  4. 给出了:

    c = [ABD]
    
    1. 我从列表'b'中选择第三个值,即'10'
    2. 因此我会使用c and e10
    3. 我比较了上面的列表。
    4. 我得到c = [ABDF]
    5. 我选择列表'b'中的最后四个值,即'01'
    6. 因此我会使用c and e01
    7. 我比较了上面的列表。
    8. 最后,我得到c = [ABDFK]
    9. 结束
    10. 我希望现在问题会更加明朗:)

1 个答案:

答案 0 :(得分:2)

如果我清楚地了解您,您正在寻找动态访问aXX的方法,以便您可以使用它们来执行计算。

您需要的是词典

dct = {'00' : a00, '01' : a01, '10' : a10, '11' : a11}    
c = dct[b[0]]

for i in b[1:]:
    d = dct[i]
    newcols = {'x' : d.iloc[:, 0].str[0], d.columns[0] : d.iloc[:, 0].str[1:]}
    m = c.assign(x=c.iloc[:, 0].str[-1]).merge(d.assign(**newcols))

    ... # rest of your code

您可以使用b个元素索引到dct并提取该迭代所需的数据帧。