将 pandas 表透视为多列

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

美好的一天,

我希望通过分组变量将我的数据帧转换为宽格式。像这样:

Group_var |type |value
1         |11    | 111
1         |12    | 111
2         |22    | 222
3         |33    | 333
3         |34    | 334
3         |35    | 335

转换成以下格式:

Group_var |type_1 |value_1 |type_2 |value_2|type_3 |value_3
1         |11    | 111     |12     | 111   |       |
2         |22    | 222     |       |       |       |
3         |33    | 333     |34     | 334   |35     |335

每个 group_var 具有不同数量的值和类型,这使得旋转成为问题。有什么想法如何做到这一点吗?

pandas dataframe pivot-table
1个回答
0
投票

所以,我想这样的事情是有效的:

import pandas as pd

data = {
    'Group_var': [1, 1, 2, 3, 3, 3],
    'type': [11, 12, 22, 33, 34, 35],
    'value': [111, 111, 222, 333, 334, 335]
}

df = pd.DataFrame(data)

# Group by 'Group_var' and assign a unique column for each type-value pair
df['type_num'] = df.groupby('Group_var').cumcount() + 1

# Pivot the table to wide format
wide_df = df.pivot(index='Group_var', columns='type_num', values=['type', 'value'])

# Flatten the multi-level column index
wide_df.columns = [f'{col[0]}_{col[1]}' for col in wide_df.columns]

# Reset the index to get 'Group_var' as a column
wide_df.reset_index(inplace=True)

print(wide_df)

输出:

   Group_var  type_1  type_2  type_3  value_1  value_2  value_3
0          1    11.0    12.0     NaN    111.0    111.0      NaN
1          2    22.0     NaN     NaN    222.0      NaN      NaN
2          3    33.0    34.0    35.0    333.0    334.0    335.0

如果评论不够,需要更多解释或者是否有任何错误,请告诉我。

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