我的数据是这样的,我想计算 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
groupby
操作后
each_pid = data.groupby(data['pid']).apply(lambda g: g.sort_values(['predict', 'prob'], ascending=False))
我有一个这样的数据框。
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
现在我想要另一个列名称 weight
其值是根据每个组的顺序如下。
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
有人能帮忙吗?
编辑。感谢@Akshay Kandul 和@Allen 的帮助。代码作为
data = data.groupby(level=0).head(2)
data['weight'] = data.groupby(level=0).cumcount()+1
最佳答案
您可以在索引级别为零的分组上使用 cumcount 函数
each_pid['weight'] = each_pid.groupby(level=[0]).cumcount()
输出
label pid predict prob query title weight
pid
1 0 0 1 2 0.9 A a 0
2 1 1 2 0.7 A c 1
1 2 1 0 0.8 A b 2
2 4 4 2 2 0.9 D e 0
3 3 2 1 0.8 D d 1
如果您真的希望它以 1 开头,那么只需这样做:
each_pid['weight'] = each_pid.groupby(level=[0]).cumcount()+1
输出
label pid predict prob query title weight
pid
1 0 0 1 2 0.9 A a 1
2 1 1 2 0.7 A c 2
1 2 1 0 0.8 A b 3
2 4 4 2 2 0.9 D e 1
3 3 2 1 0.8 D d 2
如果您需要每个组的前 2 条记录,您可以使用此代码:
print(each_pid.groupby(level=0).head(2))
关于python - pandas如何在 `groupby`之后按顺序添加一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44689348/