Добавьте порядковый номер в выражение groupby (). Head (n) в Pandas - PullRequest
2 голосов
/ 27 октября 2019

У меня есть выражение в Пандах, где я сортирую три верхних значения по стране:

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

Как мне лучше всего поступить так?

1 Ответ

2 голосов
/ 27 октября 2019

Я полагаю, вам нужно GroupBy.rank и method='dense' для ранга всегда увеличивается на 1 между группами по отсортированным значениям столбца Value с преобразованием в integers:

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

Если нужен счетчик, то лучше использовать GroupBy.cumcount:

df['Rank1'] = df.groupby("Country").cumcount() + 1

Различие лучше всего видно в измененных данных:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...