Pandas 的 melt()
函数是用来将 DataFrame 中的很多列重塑转换为两列,一列为原来多列的列名,一列为原来多列对应的列值。
一、数据准备
python
import pandas as pd
df = pd.DataFrame({
"product_id": [0, 1],
"store1": [95, 70],
"store2": [100, None],
"store3": [105, 80]
})
print(df)
product_id store1 store2 store3
0 0 95 100.0 105
1 1 70 NaN 80
二、方法签名
python
def melt(
frame: DataFrame, # 需重塑转换的 dataframe
id_vars=None, # 指定不参与转换的列
value_vars=None, # 指定参与转换的列
var_name=None, # 转换后列名所在列的名字,默认为 variable
value_name: Hashable = "value", # 转换后列值所在列的名字,默认为 value
col_level=None,
ignore_index: bool = True,
) -> DataFrame:
三、基本使用
python
# 使用 id_vars 参数指定不参与转换的列,其余列均进行转换
df1 = pd.melt(frame=df, id_vars="product_id")
print(df1)
product_id variable value
0 0 store1 95.0
1 1 store1 70.0
2 0 store2 100.0
3 1 store2 NaN
4 0 store3 105.0
5 1 store3 80.0
python
# # 使用 id_vars 参数指定不参与转换的列,使用 value_vars 指定参与转换的列,其余列删除
df2 = pd.melt(df, id_vars="product_id", value_vars=["store1", "store2"])
print(df2)
product_id variable value
0 0 store1 95.0
1 1 store1 70.0
2 0 store2 100.0
3 1 store2 NaN
python
# 使用 var_name 和 value_name 修改转换后的列名称
df3 = pd.melt(df, id_vars="product_id", var_name="store", value_name="price")
print(df3)
product_id store price
0 0 store1 95.0
1 1 store1 70.0
2 0 store2 100.0
3 1 store2 NaN
4 0 store3 105.0
5 1 store3 80.0