![](/img/trans.png)
[英]How to create rank column based on multiple columns with groupby in pandas
[英]Python Pandas: create rank columns, move orginal column max 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.