如何将Pandas DataFrame表头转换为列?(大样本场景适用)
解决方案
要将宽格式的DataFrame转换为目标的长格式(日期、名称、数值三列结构),可以使用Pandas的stack()或melt()方法,这两种方法都能高效处理你提到的1000行+243列的大数据量。
方法一:使用stack()(更简洁)
针对你的示例数据,代码如下:
# 将列转为二级索引,再重置索引得到长格式 df_long = df.stack().reset_index() # 重命名列名匹配目标格式 df_long.columns = ['日期', '名称', '数值']
执行后得到的结果示例:
| 日期 | 名称 | 数值 |
|---|---|---|
| 21/10/2022 | Name_1 | 2 |
| 21/10/2022 | Name_2 | 8 |
| 21/10/2022 | Name_3 | 7 |
| 22/10/2022 | Name_1 | 6 |
| ... | ... | ... |
方法二:使用melt()
如果需要更明确地指定转换逻辑,也可以用melt():
# 先将日期索引转为普通列 df_reset = df.reset_index() # 执行宽转长操作 df_long = df_reset.melt( id_vars='index', # 保留的标识列(日期) var_name='名称', # 原列名对应的新列名 value_name='数值' # 原单元格值对应的新列名 ) # 重命名日期列 df_long.rename(columns={'index': '日期'}, inplace=True)
两种方法都是Pandas内置的矢量化操作,处理大体积数据时性能优异,无需担心效率问题。
内容的提问来源于stack exchange,提问作者blueorchid
相关产品推荐
相关产品推荐

