Python Pandas: создание ранговых столбцов, перемещение оригинального столбца максимального ранга - PullRequest
1 голос
/ 29 апреля 2019

Мне нужно иметь возможность
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

1 Ответ

0 голосов
/ 29 апреля 2019

Перебирать строки и накапливать значения в массиве:

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
...