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

如何在Pandas DataFrame中创建话题虚拟列并填充对应value值?

实现话题列的多列值映射(填充对应value,否则为0)

原始数据

原始数据集结构如下:

reviewId   topic   value
      01       2      -4
      02       2       9
      03       0      -7
      04       5      -1
      05       1      38

可复现的Pandas初始化代码:

import pandas as pd

raw_df = pd.DataFrame({
    'reviewId': ['01', '02', '03', '04', '05'],
    'topic': [2, 2, 0, 5, 1],
    'value': ['-4', '9', '-7', '-1', '38']})

需求目标

为话题1-5创建新列t1-t5,当某行topic等于对应编号时填充该行的value值,否则填充0,最终表格结构如下:

reviewIdtopicvaluet1t2t3t4t5
012-40-4000
022909000
030-700000
045-10000-1
05138380000

解决方案

方法一:循环创建列(直观易懂)

先将value列转换为数值类型,再逐一生成t1-t5列:

# 转换value为整数类型
raw_df['value'] = raw_df['value'].astype(int)

# 循环创建t1到t5列
for topic_num in range(1, 6):
    raw_df[f't{topic_num}'] = raw_df.apply(
        lambda row: row['value'] if row['topic'] == topic_num else 0,
        axis=1
    )

# 调整列顺序匹配目标结构
result_df = raw_df[['reviewId', 'topic', 'value', 't1', 't2', 't3', 't4', 't5']]

方法二:虚拟列乘法(高效批量处理)

利用pd.get_dummies生成虚拟列,再与value列相乘实现批量赋值,适合大数据集:

import pandas as pd

# 转换value为整数类型
raw_df['value'] = raw_df['value'].astype(int)

# 生成话题虚拟列,前缀为t
topic_dummies = pd.get_dummies(raw_df['topic'], prefix='t').astype(int)
# 过滤出t1-t5列,排除t0(未分配话题)
topic_dummies = topic_dummies.filter(regex=r't[1-5]')
# 虚拟列与value相乘,得到对应话题的数值
topic_values = topic_dummies.mul(raw_df['value'], axis=0)

# 合并原始数据与话题数值列
result_df = pd.concat([raw_df, topic_values], axis=1)

# 补充缺失的t3、t4列(原始数据无对应话题)并填充0
for col in ['t1', 't2', 't3', 't4', 't5']:
    if col not in result_df.columns:
        result_df[col] = 0

# 调整列顺序
result_df = result_df[['reviewId', 'topic', 'value', 't1', 't2', 't3', 't4', 't5']]

两种方法都能得到目标表格,方法一逻辑直观,适合小数据集;方法二效率更高,适合大规模数据处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:40:16