Python Pandas : create rank columns, 移动原始列最大排名

标签 python pandas rank

我需要能够
1. 计算所有行中每一列的排名,
2.找到每行的最大列标签,
3.然后在每一行中移动原始df的最大排名列。

当仅使用原始 df 中的数据时,这很简单。但如果需要不同的排名调用,似乎很难完成。

下面是我的 Python Pandas 代码来完成此任务。但这不起作用。它似乎没有按照我的预期解释我的声明 df1['maxV'] = df1[df1['maxR']] 。实现的建议将不胜感激。

import pandas as pd
import numpy ass np
df1 = pd.DataFrame(np.random.randn(10,3),columns=list('ABC')
rankV = df1.pct_change(3) # calculate ranking values
df1['maxR'] = rankV.idxmax(axis=1) # add max ranked column label of rankv
df1['maxV'] = df1[df1['maxR']] # move max ranked column value to maxV

最佳答案

迭代行并将值累积到数组中:

maxVals = [np.nan]*3

for index, row in df1[pd.notna(df1['maxR'])].iterrows():   
      maxVals.append(df1.loc[index, row['maxR']])

df1['maxV'] = maxVals

替代方案:一种不太直观的方法可能是使用索引和值对 df1 进行索引,这将返回更宽的 Dataframe(列数等于行数),其对角线具有最大值:

maxVals = [np.nan]*3
newDf = df1.loc[df1['maxR'][3:].index, df1['maxR'][3:].values]
maxVals.extend(np.diag(newDf))
df1['maxV'] = maxVals

关于Python Pandas : create rank columns, 移动原始列最大排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55909108/

相关文章:

Python:字典键值对 Pandas 值的平均值

python - 识别 pandas 中具有稀疏 nan 的时间序列中的数据组

powerbi - Power BI 将排名或行号添加到列

python - 如何对数据进行排名,但对相同的数据给出相同的排名

python - 在opencv中复制并粘贴图像区域?

python - Mechanize :为什么我的表单列表只包含 1 个元素?

python - 使用 psycopg2 将值插入到 postgres 表中是否有更短的语法?

python代码发出蜂鸣声

python - DataFrame 到嵌套 JSON

python - Pandas 等级法中的力增量