我有一个数据框,其中每一行相对于其他所有行都排在几个属性上。一行可以在2个属性中具有相同的排名(这意味着在少数几个属性中行可能是最好的),如下面的第2行和第3行所示:
att_1 att_2 att_3 att_4
ID
984 5 3 1 46
794 1 1 99 34
6471 20 2 3 2
每行,我要保留索引(ID)和具有最低值的单元格-如果单元格超过1个,我必须选择一个随机数来保持正态分布。
我设法将df转换为numpy数组并运行以下命令:
idx = np.argmin(h_data.values, axis=1)
但是我每次都得到第一行。
所需的输出:
ID MIN
984 att_3
794 att_2
6471 att_1
谢谢!
答案 0 :(得分:1)
对numpy.random.choice
使用列表理解:
df['MIN'] = [np.random.choice(df.columns[x == x.min()], 1)[0] for x in df.values]
print (df)
att_1 att_2 att_3 att_4 MIN
ID
984 5 3 1 46 att_3
794 1 1 99 34 att_1
6471 20 2 3 2 att_2
答案 1 :(得分:1)
我想为每一行(或每一列)做一些事情,应该尝试.apply方法
df.apply(np.argmin, axis=1) #row wise
df.apply(np.argmin, axis=0) #column wise