创建新列,根据其他列的排名显示值

2024-03-28 15:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中一些日期是行,值是列。要想了解情况,df如下所示:

print(df1)

            c1  c2  c3  c4
12/12/2016  38  10   1   8
12/11/2016  44  12  17  46
12/10/2016  13   6   2   7
12/09/2016   9  16  13  26

我想创建一个规则,使它对df1中的每一行进行排序,并创建另一个数据帧,在其中存储一些常量值。例如,对于每行中的2个最高值,它指定值k=5,对于最低的2个值,它显示值y=-9

我想获得以下数据:

            c1  c2  c3  c4
12/12/2016  5    5  -9  -9
12/11/2016  5  -9   -9   5
12/10/2016  5  -9   -9   5
12/09/2016  -9  5   -9   5

我想用np.分区在df1上,但是我被困在如何创建新的数据帧上。任何提示都将不胜感激!你知道吗

谢谢!你知道吗


Tags: 数据df排序规则np情况df1分区
2条回答

下面是一个NumPy解决方案:

df.iloc[:] = np.where(df.values.argsort(1).argsort(1) > 1, 5, -9)

print(df)

            c1  c2  c3  c4
12/12/2016   5   5  -9  -9
12/11/2016   5  -9  -9   5
12/10/2016   5  -9  -9   5
12/09/2016  -9   5  -9   5

^{}^{}DataFrame构造函数一起使用:

arr = np.where(df.rank(axis=1, method='dense') > 2, 5, -9)

df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print (df)
            c1  c2  c3  c4
12/12/2016   5   5  -9  -9
12/11/2016   5  -9  -9   5
12/10/2016   5  -9  -9   5
12/09/2016  -9   5  -9   5

相关问题 更多 >