Python Pandas:将长表转换为宽表(Serial字段转列)
解决办法:用Pandas将长表转为指定结构的宽表
这事儿用pandas的pivot()方法就能完美搞定,我给你整理了完整的步骤,包括代码和结果示例:
1. 先构造你给出的原始DataFrame
首先先把你提供的数据用pandas还原出来,方便你直接测试:
import pandas as pd data = { 'Date': ['2/1/1996', '2/1/1996', '2/1/1996', '3/1/1996', '3/1/1996', '3/1/1996'], 'Price': [0.5909, 0.5711, 0.5845, 0.5874, 0.5695, 0.584], 'Serial': [1, 2, 3, 1, 2, 3] } df = pd.DataFrame(data)
2. 使用pivot()转换为宽表
直接调用pivot()方法,指定行索引、列名和对应填充的值即可:
wide_df = df.pivot(index='Date', columns='Serial', values='Price')
参数解释:
index='Date':把Date列作为结果的行索引columns='Serial':把Serial的唯一值作为结果的列名values='Price':用Price列的值填充对应的行列位置
3. 转换后的结果
运行上面的代码后,你会得到如下结构的宽表:
Serial 1 2 3 Date 2/1/1996 0.5909 0.5711 0.5845 3/1/1996 0.5874 0.5695 0.5840
额外提示:如果存在重复的(Date, Serial)组合
如果你的数据里同一个日期和序列号对应多个价格,pivot()会报错,这时候可以用pivot_table()并指定聚合函数,比如取平均值:
wide_df = df.pivot_table(index='Date', columns='Serial', values='Price', aggfunc='mean')
内容的提问来源于stack exchange,提问作者El Chan
相关产品推荐
相关产品推荐

