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

如何将DataFrame指定列值转为新行,生成符合要求的目标数据表

实现方案

以下两种基于pandas的方案都可以完成转换:


方法1:使用melt宽表转长表(推荐)

melt是pandas内置的列转行专用函数,代码更简洁:

import pandas as pd

# 原始DataFrame示例,实际使用时替换为你自己的df即可
df = pd.DataFrame({
    'Item_ID': [0,0,0],
    'User_ID': [1,2,3],
    'Value': [0,0,0],
    'Residents': [5.0,4.0,2.0],
    'Above_18': [2.0,2.0,2.0]
})

# 核心转换逻辑
res = df.melt(
    id_vars='User_ID',  # 保留不需要转换的用户ID列
    value_vars=['Residents', 'Above_18'],  # 需要转成行的两列
    var_name='Item_ID',
    value_name='Value'
).replace({'Item_ID': {'Residents': 1, 'Above_18': 2}})  # 把列名映射为要求的Item_ID值

# 调整列顺序、转整数、重置索引(可按需调整)
res = res[['Item_ID', 'User_ID', 'Value']].astype(int).reset_index(drop=True)

方法2:手动生成子表后拼接

逻辑更直观,适合刚接触pandas的用户:

# 生成Item_ID=1的子表
df_item1 = df[['User_ID', 'Residents']].rename(columns={'Residents': 'Value'})
df_item1['Item_ID'] = 1

# 生成Item_ID=2的子表
df_item2 = df[['User_ID', 'Above_18']].rename(columns={'Above_18': 'Value'})
df_item2['Item_ID'] = 2

# 拼接两个子表、调整输出格式
res = pd.concat([df_item1, df_item2], ignore_index=True)[['Item_ID', 'User_ID', 'Value']].astype(int)

如果不需要把Value列转为整数,可以去掉代码里的.astype(int)部分。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:54:01