我试图将数据框分为两部分。首先获取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
如果不复制数据帧并将结果合并在一起,我似乎无法做到这一点。但我认为我应该能够通过一个简单的步骤来实现这一目标
答案 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()