2016-05-30 104 views
-1

例如基於當前行,我有一個DF比較其他行

ID Name Value 
0 A  10 
1 A  11 
3 A  15 
4 B  7 
5 B  11 
C X  1 

我想找到,當前行,算上其他許多行如何具有相同的名稱和更大的價值。 預期輸出;

ID Name Value Res 
0 A  10  2 
1 A  11  1 
3 A  15  0 
4 B  7  1 
5 B  11  0 
6 X  1  0 

編輯:其他案例。僅包含在其中計數標籤= 1

ID Name Value Tag Res 
0 A  9  1 2 
1 A  10  0 2 
2 A  11  1 1 
3 A  15  1 0 
4 B  7  1 1 
5 B  11  1 0 
6 X  1  1 0 

回答

3

有了一些調整,你可以使用Series.rankmethod='dense'

>>> grouped = df.groupby("Name")["Value"] 
>>> df["Res"] = grouped.rank(method="dense", ascending=False).astype(int) - 1 
>>> df 
    ID Name Value Res 
0 0 A  10 2 
1 1 A  11 1 
2 3 A  15 0 
3 4 B  7 1 
4 5 B  11 0 
5 C X  1 0 
+0

謝謝!這工作。似乎我的數據有額外的情況。我更新了我的問題。 – arkisle