猿问

按行对熊猫数据框进行排序

示例输入数据框


import pandas as pd

df_input = pd.DataFrame([[1.7, 0.2], [0.4, 0.93], [0.05, 0.96], [0.97, 0.68]], columns=["A", "B"])

此示例有两列,而实际数据框有 10 列。我想按升序对每一行进行排序,然后将 -1 分配给前 5 列,将 +1 分配给接下来的 5 列。示例输出如下:-


df_output=pd.DataFrame([[1, -1], [-1, 1], [-1, 1], [1, -1]], columns=["A", "B"])

请建议前进的方向。


繁星淼淼
浏览 137回答 3
3回答

绝地无双

您可以rank,然后通过numpy.where以下方式有条件地分配:df[:] = np.where(df.rank(axis=1) > df.shape[1] / 2, 1, -1)print(df)   A  B0  1 -11 -1  12 -1  13  1 -1注意:这假设重复值总是获得相同的等级。

慕无忌1623718

你想要np.argsort:np.argsort(df_input, axis=1).replace(0, -1)   A  B0  1 -11 -1  12 -1  13  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   90  49  80  80  27  15  13  52  50  48  691  51  24  55  73  81  55  32  67  19  142  67   2  29  19  14  89  54  83  22  643  24  55  87  94  22  61  74  26  37   8v = 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  90  1 -1 -1  1 -1  1  1  1 -1 -11  1  1 -1  1 -1 -1  1  1 -1 -12 -1 -1 -1  1 -1  1  1 -1  1  13  1 -1 -1  1  1 -1  1  1 -1 -1
随时随地看视频慕课网APP

相关分类

Python
我要回答