熊猫获取按其他列值分组的列值顺序

时间:2019-05-16 14:37:04

标签: pandas group-by

我有以下数据框:

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

现在,我想创建第三列,在其中确定按搜索ID分组的价格位置。这是我想要的结果:

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 个答案:

答案 0 :(得分:5)

您可以将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

答案 1 :(得分:2)

是这个

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