按每2列重塑DataFrame:将合并排序后的宽表转换为长表
解决方案
原始数据与合并结果
初始数据集 df
| X | Y |
|---|---|
| 5.2 | 6.5 |
| 3.3 | 7.6 |
初始数据集 df_year
| X | Y |
|---|---|
| 2014 | 2014 |
| 2015 | 2015 |
合并并排序列的代码
import pandas as pd df_all_cols = pd.concat([df, df_year], axis=1) sorted_columns = sorted(df_all_cols.columns) df_all_cols_sort = df_all_cols[sorted_columns]
合并排序后的结果
| X | X | Y | Y |
|---|---|---|---|
| 5.2 | 2014 | 6.5 | 2014 |
| 3.3 | 2015 | 7.6 | 2015 |
转换为目标格式的方法
针对每个变量(X、Y)单独提取对应列,重命名后添加变量标记,最后合并所有结果即可:
# 存储各变量处理结果的列表 groups = [] # 遍历X、Y两个变量 for var in ['X', 'Y']: # 提取当前变量的两列,重命名为name和year temp_df = df_all_cols_sort[[var, var]] temp_df.columns = ['name', 'year'] # 添加Variable列标记当前变量 temp_df['Variable'] = var groups.append(temp_df) # 合并所有变量的结果,重置索引 final_df = pd.concat(groups, ignore_index=True)
最终结果
| name | year | Variable |
|---|---|---|
| 5.2 | 2014 | X |
| 3.3 | 2015 | X |
| 6.5 | 2014 | Y |
| 7.6 | 2015 | Y |
内容的提问来源于stack exchange,提问作者Lola Ro
相关产品推荐
相关产品推荐

