You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中按id分组并计算1/分组行数作为权重列?

问题:如何在Pandas中按分组计算每行的权重(组行数的倒数)?

先看我们的初始DataFrame:

import pandas as pd

df = pd.DataFrame({
    'id': [1, 1, 2, 2, 2],
    'val': [10, 20, 19, 21, 15]
})

需求很明确:按id分组,给每行新增一个weight列,值是该分组总条数的倒数,最终要得到这样的结果:

id  val  weight
0   1   10     0.5
1   1   20     0.5
2   2   19    0.33
3   2   21    0.33
4   2   15    0.33

最简实现方案

一行代码就能搞定,用groupby加transform是最直接的方式:

df['weight'] = 1 / df.groupby('id')['id'].transform('size')
# 或者用count()也可以,效果完全一样
# df['weight'] = 1 / df.groupby('id')['id'].transform('count')

为啥这是最简的?

  • groupby('id')帮我们把数据按id分成两组(id=1和id=2)
  • .transform('size')会计算每个分组的行数,然后把这个值映射回原DataFrame的每一行——也就是说,id=1的两行都会拿到2,id=2的三行都会拿到3
  • 最后用1除以这个值,就得到了每组的权重,直接赋值给新列就行

如果需要把权重保留两位小数,再加个round处理:

df['weight'] = df['weight'].round(2)

这样就完美得到你想要的结果啦~

内容的提问来源于stack exchange,提问作者Ankur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:48:36