Python 根据其他列中的值向df添加新列

Python 根据其他列中的值向df添加新列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个类似于下面的数据帧: 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 数据帧大约有

我有一个类似于下面的数据帧:

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
数据帧大约有37000行

有人能建议最简单的方法吗?我正在努力寻找一个答案,它不涉及两列的加、减、乘或除值来填充新列


谢谢

您可以创建一个字典并使用该方法,因为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
您还可以使用,这类似于SQL在时的情况;我认为这张地图就足够了。尽管如此,还是要测试它以验证速度,因为您有很多行。

与列表中所有组合的新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

如果最后一个
VQ
AQ
,预期输出是什么?