Панды получают порядок значения столбца, сгруппированный по значению другого столбца - PullRequest
1 голос
/ 16 мая 2019

У меня есть следующий фрейм данных:

srch_id    price    
1          30       
1          20       
1          25   
3          15
3          102
3          39

Теперь я хочу создать третий столбец, в котором я определяю ценовую позицию, сгруппированную по идентификатору поиска.Вот результат, который я хочу:

srch_id    price    price_position
1          30       3
1          20       1
1          25       2
3          15       1
3          102      3
3          39       2

Я думаю, что мне нужно использовать функцию преобразования.Однако я не могу понять, как мне следует обрабатывать аргумент, который я получаю, используя .transform():

def k(r):
    return min(r)

tmp = train.groupby('srch_id')['price']
train['min'] = tmp.transform(k)

Поскольку r является либо списком, либо элементом?

Ответы [ 2 ]

5 голосов
/ 16 мая 2019

Вы можете использовать series.rank() с df.groupby():

df['price_position']=df.groupby('srch_id')['price'].rank()
print(df)

   srch_id  price  price_position
0        1     30             3.0
1        1     20             1.0
2        1     25             2.0
3        3     15             1.0
4        3    102             3.0
5        3     39             2.0
2 голосов
/ 16 мая 2019

это:

df['price_position'] = df.sort_values('price').groupby('srch_id').price.cumcount() + 1


Out[1907]:
   srch_id  price  price_position
0        1     30               3
1        1     20               1
2        1     25               2
3        3     15               1
4        3    102               3
5        3     39               2
...