通过添加第一个元素并从数据框中删除第二个元素来遍历元组列表

时间:2019-10-07 13:48:47

标签: python list for-loop tuples

我有一个包含以下列的数据框:

A B C D AA1 AA2 BB1 BB2 CC1 CC2

我设置了一个表示这些变量名称的元组列表:

col2 = [
       ('AA1','AA2'),
       ('BB1','BB2'),
        'CC1','CC2')
]

还有前四个变量的列表:

col1 = ['A','B','C','D']

我的目标是通过设置for循环来创建三个不同的数据帧(一个用于变量aa,BB和CC),其中包含col1中命名的变量,该循环遍历col2中的每个元组,并保留Aa1并删除AA2(以及BB和CC相同)。

这是我想要的最终输出:

df1:A B C D AA1

df2:A B C D BB1

df3:A B C D CC1

我尝试了以下功能:

def func1(df, first, second):


    df1 = pd.concat([df[col1],df[first[x]]],axis=1)

    df1 = df.drop(second[y],axis=1)

    df1 = df1.loc[:,~df1.columns.duplicated()]

    return df1.reset_index(drop=True)



first1,second1 = zip(*col2)

first1 = list(first1)

second1 = list(second1)

for x,y in first1,second1:

    df = func1(df_input,first=x,second=y)

    output += [(df)]


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-135-11df6ece8a12> in <module>()
      5 second1 = list(second1)
      6 
----> 7 for x,y in first1,second1:
      8 
      9     df = func1(df_input,first=x,second=y)

ValueError: too many values to unpack (expected 2)

我不明白我在做什么错...任何人都可以帮助我吗?

非常感谢

3 个答案:

答案 0 :(得分:1)

如果我对您的理解很好,为什么不简单:

df1 = df[['A', 'B', 'C', 'D', 'AA1']]
df2 = df[['A', 'B', 'C', 'D', 'BB1']]
df3 = df[['A', 'B', 'C', 'D', 'CC1']]

答案 1 :(得分:0)

见下文

first1 = [1, 2]
second1 = [3, 4]
for x, y in zip(first1, second1):
    print('{} {}'.format(x, y))

输出

1 3
2 4

答案 2 :(得分:0)

ssd_mobilenet_v2

masks = [col1 + [first] for first, second in col2] # [['A', 'B', 'C', 'D', 'AA1'], ['A', 'B', 'C', 'D', 'BB1'], ['A', 'B', 'C', 'D', 'CC1']] frames = [frame.filter(items=mask) for mask in masks] 将是pandas.DataFrames的列表,您可以从中选择所需的帧。

您可以使用列表推导来创建不同的 masks 的列表(即frames) 然后,您可以再次使用列表综合来从原始数据框中过滤该特定掩码。