对pandas数据帧的多个子集进行排名

时间:2015-12-14 20:04:34

标签: python pandas dataframe

我试图将数据框分为两部分。首先获取A和B为True的子集并对这些值进行排名,然后获取剩余值并对其进行排名。

输入:

       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

如果不复制数据帧并将结果合并在一起,我似乎无法做到这一点。但我认为我应该能够通过一个简单的步骤来实现这一目标

1 个答案:

答案 0 :(得分: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()