使用'isin'和'str'的大熊猫和numpy逻辑

时间:2018-03-06 18:36:00

标签: python pandas numpy

尝试创建一个返回3或2或1

的查询

ID   Field1   Field2
1    J        JLP10A
2    J        JLP22A
3    S        JLP25C

我想如果Field1 = J并且Field2的前4个字母='JLP10'然后返回3,否则如果Field1 = J则返回2否则返回1。 因此ID 1应返回3,ID 2应返回2,ID 3应返回1.

我尝试了以下内容:

Table=Table.assign(Field3=np.where(((Table.Field1=='J')&(Table.Field2.astype(str).str[0:4].isin(['JLP10', 'JLP15']))),3, np.where(Table.Field1=='J'),2,1))))

对于ID1,这不会返回3 ..

当我删除[0:4]条件并使Field2实际匹配时,ID3会得到3。

Table=Table.assign(Field3=np.where(((Table.Field1=='J')&(Table.Field2.isin(['JLP10A', 'JLP15']))),3, np.where(Table.Field1=='J'),2,1))))

所以代码没有正确读取0:4 ..任何想法为什么??

1 个答案:

答案 0 :(得分:1)

')'的数量是错误的:-),而str[0:4]应为str[0:5]

Table=Table.assign(Field3=np.where((Table.Field1=='J')&(Table.Field2.astype(str).str[0:5].isin(['JLP10', 'JLP15'])),3, np.where(Table.Field1=='J',2,1)))
Table
Out[124]: 
   ID Field1  Field2  Field3
0   1      J  JLP10A       3
1   2      J  JLP22A       2
2   3      S  JLP25C       1

#Table=Table.assign(Field3=np.where((Table.Field1=='J')&(Table.Field2.astype(str).str.startswith('JLP10','ABCD')),3, np.where(Table.Field1=='J',2,1)))
相关问题