尝试创建一个返回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 ..任何想法为什么??
答案 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)))