如何将带日期索引的DataFrame列堆叠后按指定格式导出CSV
实现代码(Python + Pandas)
首先安装依赖(如果未安装):
pip install pandas
核心处理代码:
import pandas as pd # 假设df是你已经读入的源DataFrame,比如通过pd.read_csv读取源文件得到 # 此处为模拟示例数据的代码,实际使用时替换为你自己的读入逻辑 df = pd.DataFrame({ 'date': ['2013-01-01', '2014-01-01', '2015-01-01'], 'Allu_1': [2.00, 3.09, 4.79], 'Allu_2': [1.45, 2.35, 4.89], 'Alluv_3': [3.54, 9.01, 10.04], 'year': [2013, 2014, 2015] }) # 可选:如果你需要把列名里的Alluv统一改成Allu,加上这行代码,和示例输出格式对齐 df = df.rename(columns=lambda x: x.replace('Alluv', 'Allu') if x.startswith('Allu') else x) # 1. 把需要堆叠的数值列转为长表 melted = df.melt( id_vars=['year'], # 保留year列作为拼接标签的字段 value_vars=[col for col in df.columns if col.startswith('Allu')], # 筛选所有要堆叠的数值列 var_name='col_name', value_name='value' ) # 2. 生成要求格式的标签列 melted['label'] = melted['col_name'] + '_' + melted['year'].astype(str) # 3. 按要求导出CSV,无表头、无索引 # 如果需要用制表符分隔就加sep='\t',用空格分隔可以加sep=' ' melted[['label', 'value']].to_csv('output.csv', header=False, index=False, sep='\t', float_format='%.2f')
代码说明
- 核心用pandas的
melt方法实现宽表转长表,自动完成多列纵向堆叠的逻辑 float_format='%.2f'保证输出的数值统一保留两位小数,和示例格式一致- 如果不需要修改列名,去掉重命名的步骤即可,会直接用原始列名和年份拼接生成标签
内容的提问来源于stack exchange,提问作者user11958450
相关产品推荐
相关产品推荐

