Python 将序列号添加到表中的groupby().head(n)表达式

Python 将序列号添加到表中的groupby().head(n)表达式,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我在熊猫中有一个表达,我按国家对前三个值进行排序: Country | Value ---------------------|------ Germany | 102.1 Germany | 90.3 Germany | 44.6 Switzerland | 59.9 Switzerland | 35.3 Switzerland | 21

我在熊猫中有一个表达,我按国家对前三个值进行排序:

Country              | Value
---------------------|------
Germany              | 102.1
Germany              | 90.3
Germany              | 44.6
Switzerland          | 59.9
Switzerland          | 35.3
Switzerland          | 21.6

...and so on
我使用
df.groupby(“Country”).head(3)[[“Country”,“Value”]]
获得了这些数据。现在,我想添加第三列,将国家内的排名与值关联:

Country              | Value  | Rank
---------------------|--------|------
Germany              | 102.1  | 1
Germany              | 90.3   | 2
Germany              | 44.6   | 3
Switzerland          | 59.9   | 1
Switzerland          | 35.3   | 2
Switzerland          | 21.6   | 3

...and so on
我最好怎么做呢?

我相信您需要并且
方法class='dense'
因为组之间的秩总是通过
列的排序值增加1,并转换为
整数

df['Rank'] = df.groupby("Country")["Value"].rank(method='dense', ascending=False).astype(int)
print (df)
       Country  Value  Rank
0      Germany  102.1     1
1      Germany   90.3     2
2      Germany   44.6     3
3  Switzerland   59.9     1
4  Switzerland   35.3     2
5  Switzerland   21.6     3
如果需要计数器,则最好使用:

变化的数据最能体现差异:

print (df)
       Country  Value
0      Germany   90.3 second largest per group - 2
1      Germany  102.1 largest per group - 1
2      Germany   44.6 third largest per group - 3
3  Switzerland   21.6
4  Switzerland   35.3
5  Switzerland   59.9

df['Rank'] = df.groupby("Country")["Value"].rank(method='dense', ascending=False).astype(int)
df['Rank1'] = df.groupby("Country").cumcount() + 1

print (df)
       Country  Value  Rank  Rank1
0      Germany   90.3     2      1
1      Germany  102.1     1      2
2      Germany   44.6     3      3
3  Switzerland   21.6     3      1
4  Switzerland   35.3     2      2
5  Switzerland   59.9     1      3
print (df)
       Country  Value
0      Germany   90.3 second largest per group - 2
1      Germany  102.1 largest per group - 1
2      Germany   44.6 third largest per group - 3
3  Switzerland   21.6
4  Switzerland   35.3
5  Switzerland   59.9

df['Rank'] = df.groupby("Country")["Value"].rank(method='dense', ascending=False).astype(int)
df['Rank1'] = df.groupby("Country").cumcount() + 1

print (df)
       Country  Value  Rank  Rank1
0      Germany   90.3     2      1
1      Germany  102.1     1      2
2      Germany   44.6     3      3
3  Switzerland   21.6     3      1
4  Switzerland   35.3     2      2
5  Switzerland   59.9     1      3