Переберите список кортежей, добавив первый элемент и удалив второй элемент из фрейма данных - PullRequest
0 голосов
/ 07 октября 2019

У меня есть фрейм данных с этими столбцами:

ABCD AA1 AA2 BB1 BB2 CC1 CC2

Я установил список кортежей, представляющих имена этих переменных:

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

И список с первыми 4 переменными:

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

Моя цель - создать три разных фрейма данных (один для переменной AA, BB и CC), которые содержат переменные, названные в col1, путем установкицикл for, который проходит через каждый кортеж в col2 и сохраняет AA1 и удаляет AA2 (и то же самое для BB и CC).

Это мой желаемый конечный результат:

df1: ABCD AA1

df2: ABCD BB1

df3: ABCD 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 ]

1 голос
/ 07 октября 2019

Если я вас хорошо понял, то почему бы просто:

df1 = df[['A', 'B', 'C', 'D', 'AA1']]
df2 = df[['A', 'B', 'C', 'D', 'BB1']]
df3 = df[['A', 'B', 'C', 'D', 'CC1']]
0 голосов
/ 07 октября 2019
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]

frames будет список панд. Рамки данных, из которых вы можете выбрать нужные кадры.

Вы можете использовать понимание списка, чтобы создать список различных масок (т. е. ['A', 'B', 'C', 'D', 'AA1']) Затем вы снова можете использовать сжатие списка, чтобы отфильтровать эту конкретную маску из исходного кадра данных.

0 голосов
/ 07 октября 2019

См. Ниже

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

выход

1 3
2 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...