如何用Python Pandas转换指定DataFrame?已试方法均报错求帮助
Pandas DataFrame 转换实现方案
先模拟你的原数据结构(根据转换目标反推):
import pandas as pd # 模拟原宽表数据 df = pd.DataFrame({ 'Date': ['2023-01-01', '2023-01-02'], 'A Value': [10, 20], 'A Comment': ['Good', 'Better'], 'B Value': [30, 40], 'B Comment': ['OK', 'Great'], 'C Value': [50, 60], 'C Comment': ['Fine', 'Excellent'] })
按照以下步骤转换即可:
- 用
pd.melt将宽表转成基础长表,保留Date作为标识列:
melted_df = df.melt(id_vars='Date', var_name='Indicator_Type', value_name='Content')
- 拆分
Indicator_Type列,分离出指标名称(A/B/C)和数据类型(Value/Comment):
melted_df[['Indicator', 'Type']] = melted_df['Indicator_Type'].str.split(' ', expand=True)
如果你的列名是下划线分隔(比如A_Value),把分隔符改成'_'即可
- 用
pivot将类型列转成目标列,再重置索引:
transformed_df = melted_df.pivot(index=['Date', 'Indicator'], columns='Type', values='Content').reset_index()
- 清理索引名并调整列顺序:
transformed_df.columns.name = None transformed_df = transformed_df[['Date', 'Indicator', 'Value', 'Comment']]
最终得到的transformed_df就是你需要的结构:
Date Indicator Value Comment 0 2023-01-01 A 10 Good 1 2023-01-01 B 30 OK 2 2023-01-01 C 50 Fine 3 2023-01-02 A 20 Better 4 2023-01-02 B 40 Great 5 2023-01-02 C 60 Excellent
内容的提问来源于stack exchange,提问作者Anaam Fatma
相关产品推荐
相关产品推荐

