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

2024-10-03 04:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我先前问题的一个有力简化:)

有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()
    

它给出:

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. 结束

我希望现在的问题会更明朗:)


Tags: indataframe列表forlenrangepdstr
1条回答
网友
1楼 · 发布于 2024-10-03 04:28:43

如果我理解的很清楚,那么您正在寻找一种动态访问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,并提取迭代所需的数据帧。你知道吗

相关问题 更多 >