3
我有以下DF,其中,列A,B,C是具有严格的排序分类变量:熊猫:问题与范畴列分钟()
df = DataFrame([[0, 1, 'PASS', 'PASS', 'PASS'],
[0, 2, 'CHAIN', 'FAIL', 'PASS'],
[0, 3, 'PASS', 'PASS', 'TATPG'],
[0, 4, 'FAIL', 'PASS', 'FAIL'],
[0, 5, 'FAIL', 'ATPG', 'FAIL']],
columns = ['X', 'Y', 'A', 'B', 'C'])
for c in ['A','B','C']:
df[c] = df[c].astype('category', categories=['CHAIN', 'ATPG', 'TATPG', 'PASS', 'FAIL'], ordered=True)`
我想创建其定义一个新列d由分('A','B','C')。例如,第1行说'CHAIN'。这是最小的价值。因此,D [1] = CHAIN等。的d列应导致如下:
D[0] = PASS, D[1] = CHAIN, D[2] = TPATG, D[3] = PASS, D[4] = ATPG
我尝试:
df['D'] = df[['A','B','C']].apply(min, axis=1)
但是,这是行不通的应用()使得A/B/C柱成为类型的对象,因此分钟的()按照字典顺序排序值,而不是我提供的顺序。
我也尝试:
df['D'] = df[['A', 'B', 'C']].transpose().min(axis=0)
TRANSPOSE(移调)()也列中的A/B/C的结果得到改变输入对象,而不是类别。
有关如何正确执行此操作的任何想法?如果使用apply(),我宁愿不将列重新排列为第二次分类。
df[indicator] = df[[any subset of (A,B,C)]].min()