Python数据分析中 melt()函数的一些用法

发布时间 2023-05-08 08:26:28作者: 树娃娃

melt()函数是一个数据重塑工具,用于将宽格式数据转换为长格式数据(Unpivot a DataFrame from wide to long format, optionally leaving identifiers set.)

1. 基本语法

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

  • frame : 需要重塑的Dataframe
  • id_vars : 保留不变的列,即不进行重塑的列(Column(s) to use as identifier variables)
  • value_vars : 要进行重塑的列,若没有为该变量赋值则默认为所有未包含在id_vars中的列(Column(s) to unpivot. If not specified, uses all columns that are not set as id_vars.)
  • var_name : 新列中变量名一列的列名(Name to use for the ‘variable’ column. If None it uses frame.columns.name or ‘variable’.)
  • value_name : 新列中变量值一列的列名(Name to use for the ‘value’ column.)
  • col_level : Name to use for the ‘value’ column.
  • ignore_index : If True, original index is ignored. If False, the original index is retained. Index labels will be repeated as necessary.

2. 示例

创建一个简单的DataFrame

X1 = pd.DataFrame(
      dict(
            Person=["Bob", "Alice", "Steve"],
            Age=[32, 24, 64],
            Weight=[128, 86, 95],
            Height=[180, 175, 165],
      )
  )
 PersonAgeWeightHeight
0Bob32128180
1Alice2486175
2Steve6495165

1) 利用id_vars保留列

当只有id_vars被赋值时,未出现在id_vars中的列均会被重塑

X1.melt(id_vars=["Person"])
 Personvariablevalue
0BobAge32
1AliceAge24
2SteveAge64
3BobWeight128
4AliceWeight86
5SteveWeight95
6BobHeight180
7AliceHeight175
8SteveHeight165

2) 利用value_vars选择要重塑的列

id_varsvalue_vars均被赋值时,未出现在这两个参数中的列不会在新生成的DataFrame中出现

X1.melt(id_vars=["Person"], value_vars=["Weight", "Height"], var_name="Type", value_name="value")
 PersonTypevalue
0BobWeight128
1AliceWeight86
2SteveWeight95
3BobHeight180
4AliceHeight175
5SteveHeight165

cf : TP01 Q7, TP02 Q17