我需要能够
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/