如何使用Pandas将单行多列表格重塑为分类-值对格式?
解决单行DataFrame重塑为Category-Value格式的问题
先构造和你描述一致的单行DataFrame:
import pandas as pd df = pd.DataFrame({ 'Year': [1999], 'foo': [10], 'bar': [30], 'baz': [20] })
你需要的是把foo、bar、baz这三列转成Category列的行值,对应数值放到Value列,用pandas.melt()就能实现,核心是明确指定要转换的列,以及新列的名称:
方法1:仅保留Category和Value列
melted_df = df.melt( value_vars=['foo', 'bar', 'baz'], # 指定要转换为行的列 var_name='Category', # 存储原列名的新列名 value_name='Value' # 存储对应数值的新列名 )
输出结果:
| Category | Value |
|---|---|
| foo | 10 |
| bar | 30 |
| baz | 20 |
方法2:保留Year列(如需关联其他年份数据)
如果后续需要保留年份信息,只需加上id_vars参数指定要保留的标识符列:
melted_df_with_year = df.melt( id_vars=['Year'], # 保留不参与转换的列 value_vars=['foo', 'bar', 'baz'], var_name='Category', value_name='Value' )
输出结果:
| Year | Category | Value |
|---|---|---|
| 1999 | foo | 10 |
| 1999 | bar | 30 |
| 1999 | baz | 20 |
你之前用melt失败,大概率是没明确指定value_vars,导致把Year也当成了要转换的列,或者没给新列指定正确的名称。
内容的提问来源于stack exchange,提问作者Aris
相关产品推荐
相关产品推荐

