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

基于两个Pandas DataFrame提取Top K概率对应列的实现问题

问题原因

原有代码运行出错的核心原因是df2的top1、top2列存储的是字符串类型的用户ID,而df1的索引是整数类型,类型不匹配导致无法正确匹配到对应数据。

修正后可运行代码

import pandas as pd
import numpy as np

# 构造原始数据
df1 = pd.DataFrame({
        "user1":[1001,1002,1003,1004],
        "A" :[0.003, 0.1, 0.13, 0.23],
        "B" :[0.03, 0.3, 0.22, 0.43],
        "C" :[0.5, 0.1, 0.08, 0.04],
        "D" :[0.453,0.2,0.2,0.14]
})
df1.set_index("user1", inplace=True)

df2 = pd.DataFrame({
    "user2":[1001, 1002],
    "top1":["1004","1003"],
    "top2":["1003", "1002"]
})

# 核心修正:将top列的字符串转成整数,匹配df1索引类型
df2[['top1', 'top2']] = df2[['top1', 'top2']].astype(int)

# 转置df1
df1_T = df1.T

# 生成结果
df3 = pd.DataFrame({
    row["user2"]: np.append(
        df1_T[row["top1"]].nlargest(2).index.values,
        df1_T[row["top2"]].nlargest(2).index.values
    ) for (i, row) in df2.iterrows()
}).T

# 调整列名符合要求
df3 = df3.reset_index()
df3.columns = ['user', '1', '2', '3', '4']

print(df3)

输出结果

user  1  2  3  4
0  1001  B  A  B  D
1  1002  B  D  B  D

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:05