首页 > 解决方案 > 如何使数据透视表的熊猫索引成为列名的一部分?

问题描述

我正在尝试将两列移出另一个标志列,而无需多索引。我想让列名成为指标本身的一部分。举个例子:

import pandas as pd
df_dict = {'fire_indicator':[0,0,1,0,1],
           'cost':[200, 300, 354, 456, 444],
           'value':[1,1,2,1,1],
           'id':['a','b','c','d','e']}
df = pd.DataFrame(df_dict) 

如果我执行以下操作:

df.pivot_table(index = 'id', columns = 'fire_indicator', values = ['cost','value'])

我得到以下信息:

                 cost        value     
fire_indicator      0      1     0    1
id                                     
a               200.0    NaN   1.0  NaN
b               300.0    NaN   1.0  NaN
c                 NaN  354.0   NaN  2.0
d               456.0    NaN   1.0  NaN
e                 NaN  444.0   NaN  1.0

我想要做的是以下几点:

id    fire_indicator_0_cost    fire_indicator_1_cost    fire_indicator_0_value    fire_indicator_0_value
a               200                      0                          1                        0
b               300                      0                          1                        0
c                0                      354                         0                        2
d               456                      0                          1                        0
e                0                      444                         0                        1

我知道SAS中有一种方法。python有办法pandas吗?

标签: pandaspivot-table

解决方案


只需重命名和 re_index:

out = df.pivot_table(index = 'id', columns = 'fire_indicator', values = ['cost','value'])

out.columns = [f'fire_indicator_{y}_{x}' for x,y in out.columns]

# not necessary if you want `id` be the index
out = out.reset_index()

输出:

    id      fire_indicator_0_cost    fire_indicator_1_cost    fire_indicator_0_value    fire_indicator_1_value
--  ----  -----------------------  -----------------------  ------------------------  ------------------------
 0  a                         200                      nan                         1                       nan
 1  b                         300                      nan                         1                       nan
 2  c                         nan                      354                       nan                         2
 3  d                         456                      nan                         1                       nan
 4  e                         nan                      444                       nan                         1

推荐阅读