3 回答
TA贡献1946条经验 获得超4个赞
您可以rank,然后通过numpy.where以下方式有条件地分配:
df[:] = np.where(df.rank(axis=1) > df.shape[1] / 2, 1, -1)
print(df)
A B
0 1 -1
1 -1 1
2 -1 1
3 1 -1
注意:这假设重复值总是获得相同的等级。
TA贡献1744条经验 获得超4个赞
你想要np.argsort:
np.argsort(df_input, axis=1).replace(0, -1)
A B
0 1 -1
1 -1 1
2 -1 1
3 1 -1
推广到 N 行:
v = np.where(np.argsort(df_input) >= df.shape[1] // 2, 1, -1)
df_output = pd.DataFrame(v)
print(df)
0 1 2 3 4 5 6 7 8 9
0 49 80 80 27 15 13 52 50 48 69
1 51 24 55 73 81 55 32 67 19 14
2 67 2 29 19 14 89 54 83 22 64
3 24 55 87 94 22 61 74 26 37 8
v = np.where(np.argsort(df_input) >= df.shape[1] // 2, 1, -1)
df_output = pd.DataFrame(v)
print(df_output)
0 1 2 3 4 5 6 7 8 9
0 1 -1 -1 1 -1 1 1 1 -1 -1
1 1 1 -1 1 -1 -1 1 1 -1 -1
2 -1 -1 -1 1 -1 1 1 -1 1 1
3 1 -1 -1 1 1 -1 1 1 -1 -1
添加回答
举报