如何在Pandas DataFrame中堆叠指定日期列并保留id与values列
实现DataFrame日期列堆叠并保留指定列结构
原始数据
import pandas as pd data = pd.DataFrame({'id':[1,2,3], 'start date': ['2001-11-13', '2002-6-26', '2004-2-22'], 'end date': ['2002-6-25', '2004-2-21', '2006-8-21'], 'values':[1000,2000,3000]})
解决方案
使用pd.melt()方法可快速实现宽表转长表,将指定日期列堆叠的同时,保留id和values列的对应关系:
# 执行堆叠转换 result = pd.melt( data, id_vars=['id', 'values'], # 保持结构不变的列 value_vars=['start date', 'end date'], # 需要堆叠的日期列 value_name='date' # 堆叠后的日期列名称 )
调整顺序匹配需求
如果需要先展示所有start date再展示end date,可按原列名排序后清理冗余列:
# 按原日期列类型排序并重置索引 result = result.sort_values('variable').reset_index(drop=True) # 删除原日期列的类型标记列 result = result.drop('variable', axis=1)
最终得到的DataFrame如下:
id values date 0 1 1000 2001-11-13 1 2 2000 2002-6-26 2 3 3000 2004-2-22 3 1 1000 2002-6-25 4 2 2000 2004-2-21 5 3 3000 2006-8-21
内容的提问来源于stack exchange,提问作者user18708380
相关产品推荐
相关产品推荐

