使用堆叠值中的名称将列拆分为新列

问题描述 投票:0回答:1

我有一个数据框,其中包含重复的 ID 号、重复的类别以及可能重复或不重复的数值。我需要一个最终的数据框,其中每一行都是一个 ID 号,其中的字段显示每个类别的值。

原始数据框:

df = pd.DataFrame({'IDNum': [1, 1, 2, 3, 3, 4], 'Category': ['a', 'b', 'a', 'c', 'b', 'b'],
                   'value1': [1.5, 2.2, 3.6, 5.1, 6.0, 1.0], 'value2': [2.0, 3.6, 4.5, 8.2, 6.1, 1.2]})

df

    IDNum   Category    value1  value2
0   1       a           1.5     2.0
1   1       b           2.2     3.6
2   2       a           3.6     4.5
3   3       c           5.1     8.2
4   3       b           6.0     6.1
5   4       b           1.0     1.2

我能够创建一个数据透视表,根据需要对数据进行分组,但在创建新的列名称以相应地识别数据时,我很难将其拆开。

table = pd.pivot_table(df,
                       values=['value1', 'value2'],
                       index = 'IDNum',
                       columns = 'Category')
table

         value1          value2
Category a    b     c    a    b     c
IDNum                       
1        1.5  2.2   NaN  2.0  3.6   NaN
2        3.6  NaN   NaN  4.5  NaN   NaN
3        NaN  6.0   5.1  NaN  6.1   8.2
4        NaN  1.0   NaN  NaN  1.2   NaN

我的决赛桌看起来像:

IDNum   a_value1  b_value1  c_value1  a_value2  b_value2  c_value2
1       1.5       2.2       NaN       2.0       3.6       NaN
2       3.6       NaN       NaN       4.5       NaN       NaN
3       NaN       6.0       5.1       NaN       6.1       8.2
4       NaN       1.0       NaN       NaN       1.2       NaN
python pandas dataframe pivot
1个回答
0
投票

这会起作用:

table.columns = [f"{t[0]} {t[1]}" for t in table.columns.to_flat_index()]
table = table.reset_index(col_level=1)

© www.soinside.com 2019 - 2024. All rights reserved.