重塑和数据透视表
1、stacking and unstacking
iterables=[['bar','baz','foo','qux'],['one','two']]
index = pd.MultiIndex.from_product(iterables, names=['first', 'second'])
index
df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])
df
stacked=df.stack()
stacked
stacked.unstack(2)
columns = pd.MultiIndex.from_tuples([
('A', 'cat', 'long'), ('B', 'cat', 'long'),
('A', 'dog', 'short'), ('B', 'dog', 'short')],
names=['exp', 'animal', 'hair_length']
)
columns
df = pd.DataFrame(np.random.randn(4, 4), columns=columns)
df
df.stack(level=['animal','hair_length'])
df.stack(level=[1,2])
columns = pd.MultiIndex.from_tuples([('A', 'cat'), ('B', 'dog'),
('B', 'cat'), ('A', 'dog')],
names=['exp', 'animal'])
index = pd.MultiIndex.from_product([('bar', 'baz', 'foo', 'qux'),
('one', 'two')],
names=['first', 'second'])
df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=columns)
df
df2=df.iloc[[0,1,2,4,5,7]]
df2
df2.stack('exp')
2、变形-melt
cheese = pd.DataFrame({'first': ['John', 'Mary'],
'last': ['Doe', 'Bo'],
'height': [5.5, 6.0],
'weight': [130, 150]})
cheese
cheese.melt(id_vars=['first','last'])
cheese.melt(id_vars=['first','last'],var_name='quantity')
3、wide_to_long:字符提取
#wide_to_long:提取以指定字符开头的列,i用作索引的列,j提取开头剩余的部分会成为一列
#sep:分隔符
#suffix:捕获正则表达式匹配的后缀
dft = pd.DataFrame({"A1970": {0: "a", 1: "b", 2: "c"},
"A1980": {0: "d", 1: "e", 2: "f"},
"B1970": {0: 2.5, 1: 1.2, 2: .7},
"B1980": {0: 3.2, 1: 1.3, 2: .1},
"X": dict(zip(range(3), np.random.randn(3)))
})
dft['id']=dft.index
pd.wide_to_long(dft,['A','B'],i='id',j='year')