在Python Pandas数据集中将每行的随机最小值保持不变

时间:2019-03-20 09:26:12

标签: python pandas dataframe

我有一个数据框,其中每一行相对于其他所有行都排在几个属性上。一行可以在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

谢谢!

2 个答案:

答案 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