2015-12-14 3 views
1

Я пытаюсь ранжировать dataframe в двух частях. Сначала, получив подмножество, где A и B являются True и ранжируют эти значения, а затем получают оставшиеся значения и ранжируют их.Ранг несколько подмножеств pandas dataframe

Вход:

 A  B  C 

1 False True 23 
2 True True 44 
3 True True 10 
4 True False 9 

Выход:

 A  B  C rank 

1 False True 23  4 
2 True True 44  2 
3 True True 10  1 
4 True False 9  3 

Я не могу сделать это без копии dataframes и объединение результатов вместе. Но я предполагаю, что я должен быть в состоянии сделать это в простой шаг

+0

Как вы хотите дублировать значения C должны быть обработаны? – DSM

+0

@ DSM они должны иметь одинаковый ранг –

ответ

0

Это мое предложение:

import pandas as pd 

df = pd.DataFrame([[False,True,33],[True,True,44],[True,True,10],[True,False,9],[True,True,44]],columns=['A','B','C']) 

df['TT'] = [1 if a&b else 0 for a,b in zip(df.A,df.B)] #1 means both True 

df.sort_values(['TT','C'],ascending=[False,True],inplace=True) 

n = 1 
rank = [] 
for i,group in df.groupby(['TT','C'],sort=False): #by default groupby sorts ascendingly so prevent sorting 
    for i1 in group.index: 
     rank.append(n) 
    n+=1 

df['Rank'] = rank 

df.sort_index() 
Смежные вопросы