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

如何基于值对pandas DataFrame的不同行进行重组转换?

Pandas DataFrame 结构转换方案

原DataFrame结构:

属性1属性值1属性2属性值2
a1b4
b2a5

目标DataFrame结构:

ab
12
54

解决方案

方法一:针对当前固定结构的直接构造

如果数据结构固定为两行,可直接提取对应位置的值快速构造目标DataFrame:

import pandas as pd

# 初始化原DataFrame
df = pd.DataFrame({
    '属性1': ['a', 'b'],
    '属性值1': [1, 2],
    '属性2': ['b', 'a'],
    '属性值2': [4, 5]
})

# 提取对应值生成目标DataFrame
new_df = pd.DataFrame({
    'a': [df.loc[0, '属性值1'], df.loc[1, '属性值2']],
    'b': [df.loc[1, '属性值1'], df.loc[0, '属性值2']]
})

print(new_df)

输出结果:

a  b
0  1  2
1  5  4

方法二:通用化处理(适配多场景)

如果后续数据行数不确定,或属性可能出现在属性1/属性2任意列中,可通过遍历提取目标属性值:

import pandas as pd

df = pd.DataFrame({
    '属性1': ['a', 'b'],
    '属性值1': [1, 2],
    '属性2': ['b', 'a'],
    '属性值2': [4, 5]
})

a_values = []
b_values = []

# 遍历每行,收集a、b对应的属性值
for _, row in df.iterrows():
    if row['属性1'] == 'a':
        a_values.append(row['属性值1'])
    elif row['属性1'] == 'b':
        b_values.append(row['属性值1'])
    
    if row['属性2'] == 'a':
        a_values.append(row['属性值2'])
    elif row['属性2'] == 'b':
        b_values.append(row['属性值2'])

# 构造目标DataFrame
new_df = pd.DataFrame({'a': a_values, 'b': b_values})
print(new_df)

该方法可灵活处理属性位置变化、行数扩展的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:15:37