首页 > 解决方案 > 根据其他列中的值将新列添加到 df

问题描述

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

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 行...

谁能建议最简单的方法来做到这一点?我正在努力寻找不涉及将两列中的值相加、相减、相乘或相除来填充新列的答案。

谢谢

标签: pythonpandasdataframe

解决方案


您可以创建一个字典并使用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

您也可以使用类似于 SQL 的numpy selectcase when;我确实认为地图就足够了。一定要测试它以验证速度,因为你有很多行。


推荐阅读