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

基于所属分组计算用户得分的Python实现技术问询

Python实现用户分组得分计算

问题背景

现有两个DataFrame,分别存储用户特征分组信息和分组参数:

用户特征与分组DataFrame(df1)

import pandas as pd

df1 = pd.DataFrame({
    'user': ['user 1', 'user 2', 'user 3', 'user 4', 'user 5'],
    'x1': [[0.2, 0.3, 0.5],[0.3, 0.3, 0.4],[0.4, 0.4, 0.2],[0.2, 0.1, 0.7],[0.5,0.3,0.2]],
    'group': [1, 0, 0, 2, 1]
})

df1输出:

user                x1  group
0  user 1  [0.2, 0.3, 0.5]      1
1  user 2  [0.3, 0.3, 0.4]      0
2  user 3  [0.4, 0.4, 0.2]      0
3  user 4  [0.2, 0.1, 0.7]      2
4  user 5  [0.5, 0.3, 0.2]      1

分组参数DataFrame(df2)

df2 = pd.DataFrame({
    'group': [0, 1, 2],
    'x2': [[0.4, 0.2, 0.4],[0.5, 0.1, 0.4], [0.5, 0.1, 0.4]],
    'p2': [0.231, 0.342, 0.411],
    'threshold': [0.9, 0.6, 0.8]
})

df2输出:

group                x2     p2  threshold
0      0  [0.4, 0.2, 0.4]  0.231        0.9
1      1  [0.5, 0.1, 0.4]  0.342        0.6
2      2  [0.5, 0.1, 0.4]  0.411        0.8

得分计算公式

每个用户的得分( S )计算公式为:

( S = \frac{1}{k} \cdot (x_2 - x_1)^T \cdot (x_2 - x_1) + p_2 )
其中:

  • ( k ):用户所属分组的用户数量(分组规模)
  • ( (x_2 - x_1)^T \cdot (x_2 - x_1) ):分组向量( x_2 )与用户特征向量( x_1 )差值的内积(等价于向量元素差的平方和)
  • ( p_2 ):对应分组的参数

实现步骤与代码

完整代码

import pandas as pd
import numpy as np

# 初始化DataFrame
df1 = pd.DataFrame({
    'user': ['user 1', 'user 2', 'user 3', 'user 4', 'user 5'],
    'x1': [[0.2, 0.3, 0.5],[0.3, 0.3, 0.4],[0.4, 0.4, 0.2],[0.2, 0.1, 0.7],[0.5,0.3,0.2]],
    'group': [1, 0, 0, 2, 1]
})

df2 = pd.DataFrame({
    'group': [0, 1, 2],
    'x2': [[0.4, 0.2, 0.4],[0.5, 0.1, 0.4], [0.5, 0.1, 0.4]],
    'p2': [0.231, 0.342, 0.411],
    'threshold': [0.9, 0.6, 0.8]
})

# 1. 合并两个DataFrame,关联用户与所属分组的参数
merged_df = pd.merge(df1, df2, on='group', how='left')

# 2. 计算每个分组的规模k,合并到结果中
group_sizes = df1['group'].value_counts().reset_index()
group_sizes.columns = ['group', 'k']
merged_df = pd.merge(merged_df, group_sizes, on='group', how='left')

# 3. 定义得分计算函数
def calculate_score(row):
    x1_arr = np.array(row['x1'])
    x2_arr = np.array(row['x2'])
    diff = x2_arr - x1_arr
    # 计算差值的内积(平方和)
    inner_product = np.dot(diff, diff)
    return (inner_product / row['k']) + row['p2']

# 4. 对每一行应用得分计算函数
merged_df['S'] = merged_df.apply(calculate_score, axis=1)

# 查看最终结果(仅保留关键列)
print(merged_df[['user', 'group', 'S']])

输出结果

user  group         S
0  user 1      1  0.387000
1  user 2      0  0.246000
2  user 3      0  0.256000
3  user 4      2  0.706000
4  user 5      1  0.347667

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:03:01