熊猫根据应用于多组列的条件创建新列

时间:2019-12-11 19:55:32

标签: pandas numpy

我有以下数据框df,其中rank1是该行中的唯一排名,而rank2排名可以具有相同的值,例如在第0行中rank2_A和rank2_B的值相同。

    rank1_A rank1_B rank1_C rank2_A rank2_B rank2_C
0     1       2       3       1       1       2
1     2       3       1       3       1       2

我想插入三个新列position_A,position_B,position_C,如果rank2最小,则这些列应显示为1,否则显示为0。如果rank2_A是rank2_A,rank2_B和rank2_C的最小值,则position_A将为1,position_B和position_C将为0。这很容易使用np.select

完成。
    prefix = 'rank2'

    for symbol in ['A', 'B', 'C']:
        condition = [df[f'{prefix}_{symbol}'] == df[['rank2_A', 'rank2_B', 'rank2_C']].min(axis=1)]
        df[f'position_{symbol}'] = np.select(condition, [1], default=0)

通过应用以上内容,我得到了以下信息:

    rank1_A rank1_B rank1_C rank2_A rank2_B rank2_C position_A  position_B  position_C
0     1       2       3       1       1       2         1           1           0
1     2       3       1       3       1       2         0           1           0

这里的问题是,只有一个位置列应显示为1,其余所有列应显示为0。对于第一行,由于rank2_A和rank2_B相同,因此不会发生这种情况。有没有一种方法可以将基于rank2的位置列放在首位,如果它们是唯一的,如果它们不是唯一的,则对rank1列应用np.select,以得到以下所需结果:

   rank1_A  rank1_B rank1_C rank2_A rank2_B rank2_C position_A  position_B  position_C
0     1       2       3       1       1       2         1           0           0
1     2       3       1       3       1       2         0           1           0

0 个答案:

没有答案