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

如何使用宽转长(pivot longer)操作并与关联表匹配变量名实现数据关联?

解决两个DataFrame的关联转换问题

嗨,我来帮你搞定这个DataFrame的关联转换需求!你的核心需求是把宽格式的df6转换成和df_yummy匹配的结构,最终得到id、水果名和美味度的对应表。下面是具体的步骤和可运行的Pandas代码:

步骤1:构造示例数据(方便你测试)

首先我们先把你给出的示例数据转换成Pandas DataFrame:

import pandas as pd

# 构造你的df6
df6 = pd.DataFrame({
    'id': [1, 2, 3],
    'v1': [0, 2, 0],
    'v2': [0, 0, 1],
    'v3': [3, 0, 0]
})

# 构造你的df_yummy
df_yummy = pd.DataFrame({
    'VarId': ['v1', 'v2', 'v3'],
    'VarName': ['Apple', 'Lemon', 'Peach'],
    'Yummyness': [2, 1, 3]
})

步骤2:将df6从宽格式转长格式

因为df6每行只有一个非零值,我们可以用melt方法把宽表转成窄表,然后过滤掉值为0的行,这样就得到每个id对应的变量ID和美味度:

# 转长格式,指定id为保留的列,变量名存为VarId,值存为Yummyness
df6_long = df6.melt(id_vars='id', var_name='VarId', value_name='Yummyness')

# 过滤掉美味度为0的行(这些是无效数据)
df6_long = df6_long[df6_long['Yummyness'] != 0]

这一步之后,df6_long的结构是:

idVarIdYummyness
1v33
2v12
3v21

步骤3:关联df_yummy得到最终结果

现在我们把处理后的df6_long和df_yummy通过VarId(或者同时用VarId和Yummyness,因为两者是一一对应关系)进行关联,然后整理成你需要的列名和顺序:

# 合并两个DataFrame,匹配VarId和Yummyness
result = pd.merge(df6_long, df_yummy, on=['VarId', 'Yummyness'], how='left')

# 重命名列并选择需要的字段
result = result[['id', 'VarName', 'Yummyness']].rename(columns={'VarName': 'Fruit'})

最终得到的result就是你期望的结构:

idFruitYummyness
1Peach3
2Apple2
3Lemon1

可选的简洁写法

如果你喜欢更简洁的代码,也可以用stack方法来处理宽表转换:

# 用stack转长格式
df6_stack = df6.set_index('id').stack().reset_index()
df6_stack.columns = ['id', 'VarId', 'Yummyness']
df6_stack = df6_stack[df6_stack['Yummyness'] != 0]

# 合并得到结果
result = pd.merge(df6_stack, df_yummy, on=['VarId', 'Yummyness'])[['id', 'VarName', 'Yummyness']].rename(columns={'VarName': 'Fruit'})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 07:39:07