这是我早期问题的有力简化:)
有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']
阶段:
'b'
中的前两个值,即'00'
和'01'
e00
和e01
我比较了上面的列表。我的代码只适用于这种情况:
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]
'b'
中选择第三个值,即'10'
c and e10
c = [ABDF]
'b'
中的最后四个值,即'01'
c and e01
c = [ABDFK]
我希望现在问题会更加明朗:)
答案 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
并提取该迭代所需的数据帧。