Найти третий столбец на основе группы по - Панды - PullRequest
3 голосов
/ 05 марта 2019

У меня есть три столбца ID, Score1, Score2. Мне нужно создать четвертый столбец, основанный на первом третьем, и идентификатор столбца можно сгруппировать, так как Score1 и Score2 являются записями идентификатора. Вот таблица.

id  score1 score2
1   6      10
1   5      12
2   11     22
2   3      15   

Четвертый столбец должен содержать значения из столбца Score1 при условии, что он должен возвращать значение, где значение показателя Score2 является максимальным в группе.

Таким образом, для приведенной выше таблицы таблица Score3 имеет значения, подобные приведенным ниже.

id  score1 score2 score3
1   6      10      5  
1   5      12      5
2   11     22      11
2   3      15      11

Ответы [ 3 ]

3 голосов
/ 05 марта 2019

Попробуйте с transform

df['score3']=df.groupby('id').score1.transform('max')
df
Out[411]: 
   id  score1  score2  score3
0   1       5      10       6
1   1       6      12       6
2   2      11      22      11
3   2       3      15      11

Проверьте с

df.id.map(df.groupby('id').score3.idxmax().map(df.score1))
Out[415]: 
0     5
1     5
2    11
3    11
Name: id, dtype: int64
2 голосов
/ 05 марта 2019

Используйте sort + drop_duplicates, чтобы найти значение для сопоставления для каждого id, а затем сопоставления.

s = df.sort_values('score2').drop_duplicates('id', 'last').set_index('id').score1
df['score3'] = df.id.map(s)

   id  score1  score2  score3
0   1       6      10       5
1   1       5      12       5
2   2      11      22      11
3   2       3      15      11
2 голосов
/ 05 марта 2019

Вы можете использовать:

df['score3']=df.groupby('id')['score1'].transform('max')
print(df)

   id  score1  score2  score3
0   1       5      10       6
1   1       6      12       6
2   2      11      22      11
3   2       3      15      11
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...