我必须创建一列Result
,根据匹配条件,输出将是以下3列code1
,code2
或code3
之一。 / p>
我用np.where
创建了以下语句:
df['Result'] = np.where((df.code == 'BTB.JPWK'), df.code_1,
np.where((df.code == 'BTB.JP'), df.code_2,
np.where((df.code == 'BTB.'), df.code_3, '1')))
但是结果中填充的输出不正确。无论条件匹配如何,它总是在完整迭代中填充1
,这是错误条件。
我认为我缺少正确的输出,因为在某些情况下df.code
将匹配所有3个条件,但是我只需要选择大多数数字都匹配的最佳匹配条件即可。
我有一个庞大的data-set
,因此试图找到一种更简单的方法来正确地填充结果列而不会花费太多时间。
================================================ ==========================
应用@AkshayNevrekar的解决方案后,我尝试执行修改:
我尝试了以下方法:
mask1 = [df.Cluster == 'Japan' , df.code_4 == 'BTB.JPWK']
mask2 = [df.Cluster == 'Japan' , df.code_5 == 'BTB.JP']
mask3 = [df.Cluster == 'Japan' , df.code_6 == 'BTB.']
mask4 = [df.Cluster == 'Japan' , df.code != 'BTB.']
df['Result'] = np.select([mask1, mask2, mask3, mask4],[df.code_1, df.code_2, df.code_3, df.code])
我在这里遇到值错误:
ValueError: Length of values does not match length of index
数据帧如下:
Cluster code Result
Japan BTB.JP828802 828802
Japan BTB.JP828804 828804
Japan BTB.JP828806 828806
Japan BTB.JPNS9002 NS9002
Japan 040615 040615
Japan BTB.JP823045 823045
Japan BTB.JPNS9001 NS9001
Japan BTB.JPWK821517 821517