python pandas新增加一列_python-如何在 pandas 中`groupby`之后根据顺序添加一列?

在pandas中,通过groupby操作后,如何按照顺序添加权重列,并获取每个组的前两行。数据包含pid、query、title、label、predict、prob和score等字段。通过计算cumcount()可以实现组内顺序,并用head(2)获取每组的前两条记录。
摘要由CSDN通过智能技术生成

我的数据就像,我想计算NDCG指标

pid query title label predict prob

0 1 A a 0 2 0.9

1 1 A b 2 0 0.8

2 1 A c 1 2 0.7

3 2 D d 3 1 0.8

4 2 D e 4 2 0.9

经过分组操作

each_pid = data.groupby(data['pid']).apply(lambda g: g.sort_values(['predict', 'prob'], ascending=False))

我得到了这样的 dataframe .

pid query title label predict prob score

pid

1 0 1 A a 0 2 0.9 6

2 1 A c 1 2 0.7 18

1 1 A b 2 0 0.8 42

2 4 2 D e 4 2 0.9 186

3 2 D d 3 1 0.8 90

现在,我想要另一列名称权重,该权重的值取决于每个组的顺序,如下所示.

pid query title label predict prob score weight

pid

1 0 1 A a 0 2 0.9 6 1

2 1 A c 1 2 0.7 18 2

1 1 A b 2 0 0.8 42 3

2 4 2 D e 4 2 0.9 186 1

3 2 D d 3 1 0.8 90 2

以及如何获得每个组的前2行

pid query title label predict prob score weight

pid

1 0 1 A a 0 2 0.9 6 1

2 1 A c 1 2 0.7 18 2

2 4 2 D e 4 2 0.9 186 1

3 2 D d 3 1 0.8 90 2

有人可以帮忙吗?

data = data.groupby(level=0).head(2)

data['weight'] = data.groupby(level=0).cumcount()+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值