在Pandas中把列名转换成行名/索引

  • Post category:Python

在 Pandas 中,我们可以使用 melt 函数来实现列名转换成行名/索引。

melt 函数的语法如下:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

其中,参数的含义如下:

  • frame:进行转换操作的 DataFrame。
  • id_vars:要保留的列名(列名转换成行名后将被保留在结果中),可以是列名的列表或元组,也可以是列索引的列表或元组。
  • value_vars:要转换的列名列表或元组。如果未指定,那么所有未在 id_vars 中的列都将被转换。
  • var_name:新生成的 DataFrame 中,由原来的 “宽格式” 转换成 “长格式” 后,新列的列名。
  • value_name:指定 “宽格式” 中的值列名字和输出 “长格式” 后的列名字。
  • col_level:如果输入的 DataFrame 的列名是多层索引(MultiIndex),那么使用 col_level 参数指定要转换的列的层级。

以下是一个实例:

import pandas as pd

# 创建一个 DataFrame
df = pd.DataFrame({
    'A': ['a', 'b', 'c'],
    'B': [1, 2, 3],
    'C': [4, 5, 6]
})

# 使用 melt 函数将列名转换为行名
new_df = pd.melt(df, id_vars=['A'], value_vars=['B', 'C'], var_name='my_varname', value_name='my_valname')

# 输出结果
print(new_df)

输出结果:

   A my_varname  my_valname
0  a          B          1
1  b          B          2
2  c          B          3
3  a          C          4
4  b          C          5
5  c          C          6

在上面的示例中,我们创建了一个名为 df 的 DataFrame,其中包含三列 A, B 和 C,然后使用 melt 函数将列名为 B 和 C 的列行转化为了行名,并将变化后的列名储存于 my_varname 中,所对应的值则储存在 my_valname 中。