Добавить новый столбец в df на основе значений в других столбцах - PullRequest
1 голос
/ 05 августа 2020

У меня есть фрейм данных, подобный приведенному ниже:

A        B       C
GCSE     yes     GQ
GCSE     no      GQ
NVQ      no      VQ
NVQ      yes     VQ

Мне нужно добавить четвертый столбец на основе значений столбцов B и C. Есть четыре возможных результата: EPS, HCI, CAMS, DIGI. Они должны быть такими:

B    C     D
yes  GQ    HCI
no   GQ    EPS
yes  VQ    DIGI
no   VQ    CAMS

Фрейм данных составляет около 37 000 строк ...

Кто-нибудь может посоветовать самый простой способ сделать это? Я изо всех сил пытаюсь найти ответ, который не включает добавление, вычитание, умножение или деление значений из двух столбцов для заполнения нового столбца.

Спасибо

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Используйте DataFrame.merge с новым DataFrame со всеми комбинациями в списках:

d = {'B': ['yes', 'no', 'yes', 'no'], 
     'C': ['GQ', 'GQ', 'VQ', 'VQ'], 
     'D': ['HCI', 'EPS', 'DIGI', 'CAMS']}

df = df.merge(pd.DataFrame(d), on=['B','C'], how='left')
print (df)
      A    B   C     D
0  GCSE  yes  GQ   HCI
1  GCSE   no  GQ   EPS
2   NVQ   no  VQ  CAMS
3   NVQ  yes  VQ  DIGI
1 голос
/ 05 августа 2020

Вы можете создать словарь и использовать метод map - это работает, потому что столбцы B и C являются строками:

mapping = {"yes,GQ": "HCI", "no,GQ": "EPS", "yes,VQ": "DIGI", "no,VQ": "CAMS"}

df = df.assign(D=df.B.str.cat(df.C, sep=",").map(mapping))

df

       A    B   C   D
0   GCSE    yes GQ  HCI
1   GCSE    no  GQ  EPS
2   NVQ     no  VQ  CAMS
3   NVQ     yes VQ  DIGI

Вы также можете использовать numpy выберите , что аналогично SQL case when; Думаю, для этого достаточно карты. Тем не менее, проверьте это, чтобы проверить скорость, так как у вас много строк.

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