2015-12-14 3 views
1

J'essaie de classer une base de données en deux parties. D'abord en obtenant le sous-ensemble où A et B sont Vrai et en classant ces valeurs, puis en obtenant les valeurs restantes et en les classant.classer plusieurs sous-ensembles de pandas dataframe

Entrée:

 A  B  C 

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

Sortie:

 A  B  C rank 

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

Je ne peux pas sembler le faire sans faire des copies des dataframes et la fusion des résultats ensemble. Mais je suppose que je devrais être en mesure de le faire dans une simple étape

+0

Comment voulez-vous duplications des C à traiter? – DSM

+0

@DSM ils devraient avoir le même rang –

Répondre

0

Ceci est ma suggestion:

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()