将数据透视表多索引列合并到单个级别

2024-04-26 05:12:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,如下所示:

df = 
    COLUMN_NAME  YEAR1  YEAR2   VALUE
0   Column1       2013   2014   0.042835
1   Column1       2014   2015   0.033600
2   Column2       2013   2014   0.004406
3   Column2       2014   2015   0.016900
...

其中,对于每个列_NAME,YEAR1和YEAR2,计算一个值。我希望对数据帧进行分组,使其在列_NAME上唯一,其中的列如下所示:

df_desired = 
    COLUMN_NAME  Value_from_2013_2014   Value_from_2014_2015 ...
0   Column1      0.042835                  0.033600
1   Column2      0.004406                  0.016900
...

我可以用下面的代码实现我想要的,但是它创建了一个多索引列,我如何实现呢?谢谢你的帮助

pd.pivot_table(df, 'VALUE', 'COLUMN_NAME', ['YEAR1', 'YEAR2'])

YEAR1         2013      2014
YEAR2         2014      2015
COLUMN_NAME     
Column1       0.042835  0.0336
Column2       0.004406  0.0169


Tags: 数据代码namefromdfvaluecolumnpd
3条回答

您可以使用to_flat_index展平多索引列,然后使用mapstr并添加前缀:

s.columns = ["Value_from_"+"_".join(map(str, i)) for i in s.columns.to_flat_index()]

print (s)

             Value_from_2013_2014  Value_from_2014_2015
COLUMN_NAME                                            
Column1                  0.042835                0.0336
Column2                  0.004406                0.0169

如果我理解正确,您将获得所需的值,但不是所需的标签。如果是这样,可以使用df_desired.columns = ['Value_from_2013_2014', 'Value_from_2014_2015']更改列名

df_agg = pd.pivot_table(df, 'VALUE', 'COLUMN_NAME', ['YEAR1', 'YEAR2'])
df_agg.columns = ['Value_from_' + str(df_agg.columns[i][0]) + '_' + str(df_agg.columns[i][1]) for i in range(len(df_agg.columns))]

相关问题 更多 >