我有一个类似于下面的数据框:
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行...
有人可以建议最简单的方法吗?我正在努力寻找一个答案,该答案不涉及将两列中的值相加,相减,相乘或相除以填充新列。
谢谢
答案 0 :(得分:1)
您可以创建字典并使用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
类似;我确实认为地图就足够了。由于行很多,因此请进行测试以验证速度。
答案 1 :(得分:1)
将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