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

如何用Python/Pandas转置含多列组的DataFrame?

嘿,这个数据转置的需求用Python很容易实现!我给你两种方案,按需选择:

方案1:用Pandas(推荐,简洁高效)

Pandas的melt()函数专门用来做这种宽表转长表的操作,几行代码就能搞定:

import pandas as pd

# 先把你的原始数据构造成DataFrame
data = {
    'Date': ['11-30-86', '12-31-86', '01-31-87', '02-28-87'],
    'Stock 1': [2.45, -2.57, 13.5, 3.99],
    'Stock 2': [0.47021, 1.09626, 9.33911, 4.63777],
    'Stock 3': [1.45879, -2.67784, 11.14448, 5.96181]
}
df = pd.DataFrame(data)

# 执行转置:指定Date为保留的标识列,把其他列转成Stock Name和Return
transposed_df = df.melt(
    id_vars='Date', 
    var_name='Stock Name', 
    value_name='Return'
)

# 调整列的顺序,完全匹配你想要的格式
transposed_df = transposed_df[['Stock Name', 'Date', 'Return']]

# 查看结果
print(transposed_df)

运行后得到的结果就是你想要的格式:

Stock NameDateReturn
Stock 111-30-862.45000
Stock 211-30-860.47021
Stock 311-30-861.45879
Stock 112-31-86-2.57000
Stock 212-31-861.09626
Stock 312-31-86-2.67784
.........
方案2:纯Python实现(无第三方库依赖)

如果不想用Pandas,纯Python遍历数据也能实现,适合轻量场景:

# 原始数据(第一行是表头,后面是数据行)
raw_data = [
    ['Date', 'Stock 1', 'Stock 2', 'Stock 3'],
    ['11-30-86', 2.45, 0.47021, 1.45879],
    ['12-31-86', -2.57, 1.09626, -2.67784],
    ['01-31-87', 13.5, 9.33911, 11.14448],
    ['02-28-87', 3.99, 4.63777, 5.96181]
]

# 初始化转置后的数据集,先写表头
transposed_data = [['Stock Name', 'Date', 'Return']]

# 遍历每一行数据(跳过表头行)
for row in raw_data[1:]:
    current_date = row[0]
    # 遍历每个股票的收益值(从第二列开始)
    for idx in range(1, len(row)):
        stock_name = raw_data[0][idx]
        return_value = row[idx]
        transposed_data.append([stock_name, current_date, return_value])

# 打印结果(也可以写入文件)
for line in transposed_data:
    print('\t'.join(str(item) for item in line))

运行后会输出:

Stock Name	Date	Return
Stock 1	11-30-86	2.45
Stock 2	11-30-86	0.47021
Stock 3	11-30-86	1.45879
Stock 1	12-31-86	-2.57
Stock 2	12-31-86	1.09626
Stock 3	12-31-86	-2.67784
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:13:36