pandas 最常用-逆透视

发布时间 2023-11-09 09:43:42作者: 祺琪
#构造宽表数据

d = {'names': ['小明','小王','小李','小张','小陈'], 'Chinese': [60,90,100,90,90],'Math':[100,90,90,80,80],'English':[100,90,100,90,100]}
df = pd.DataFrame(data=d)
#设置不需要转换的列"names",并对转换后的列设置列名

df_melt=pd.melt(df,id_vars=['names'],var_name='Subjects',value_name='Score')
df_melt
pd.melt(df, id_vars=['names'], value_vars=['Chinese']) 
(二)多个value_var

pd.melt(df, id_vars=['names'], value_vars=['Chinese','Math'])
案例三:宽表→长表,忽略索引 

pd.melt(df, id_vars=['names'], value_vars=['Chinese','Math']
,ignore_index=False)

(一)最外层索引

import pandas as pd
import pandas as pd
import numpy as np

d = {'names': ['小明','小王','小李','小张','小陈'], 'Chinese': [60,90,100,90,90],'Math':[100,90,90,80,80],'English':[100,90,100,90,100]}

df = pd.DataFrame(data=d)
print(df)
df.columns = [list('ABCD'), list('EFGH')]
print(df)
print(pd.melt(df, col_level=0, id_vars=['A'], value_vars=['B','C']))

(二)内层索引

d = {'names': ['小明','小王','小李','小张','小陈'], 'Chinese': [60,90,100,90,90],'Math':[100,90,90,80,80],'English':[100,90,100,90,100]}

df = pd.DataFrame(data=d)
print(df)
df.columns = [list('ABCD'), list('EFGH')]
print(df)
print(pd.melt(df, col_level=1, id_vars=['E'], value_vars=['B','C']))

(三)复合索引

d = {'names': ['小明','小王','小李','小张','小陈'], 'Chinese': [60,90,100,90,90],'Math':[100,90,90,80,80],'English':[100,90,100,90,100]}

df = pd.DataFrame(data=d)
print(df)
df.columns = [list('ABCD'), list('EFGH')]
print(df)
print(pd.melt(df, id_vars=[('A','E')], value_vars=['B','C']))