繁体   English   中英

根据其他列中的值将新列添加到 df

[英]Add new column to df based on values in other columns

我有一个类似于下面的 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

dataframe约37000行...

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

谢谢

您可以创建一个字典并使用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 select ,这类似于 SQL 的case when ; 我确实认为 map 就足够了。 一定要测试它以验证速度,因为你有很多行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM