我有以下数据框:
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
是列表还是元素?
答案 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