暂更至此,有人看再更。
纸上得来终觉浅,绝知此事要躬行,所谓的熟练使用Pandas是建立在您大致了解每个函数功能上,希望本系列能给您带来些许收获。
本篇涉及的知识点:
- 一维表和二维表互换
- stack()和unstack()
- pivot()和pivot_table()
- 高性能查询和赋值
- query()
- eval()
- 快速计算同比环比、差异
- diff()
- pct_change()
一维表和二维表互换
- 一维表是指表中各维相互独立,且不可再分的表
- 二维表是指表中部分列不独立,或者说可以归为一类的表
stack()和unstack()
从单词上看这是堆积、出栈的意思。那我们只要把行索引想象成栈那就很容易理解这两个函数了。
- stack是进栈,把列索引堆到行索引里面,那就形成了MultiIndex
- unstack是出栈,把行索引挤出到列索引去,那样就把MultiIndex变成了普通的Index
但是当原DataFrame没有MultiIndex时,unstack之后就会把列弹回到原Index前面形成MultiIndex。
# 首先创建一个非MultiIndex的一维表
df=pd.DataFrame()
df['product']=['A','B']*3
df['city']=['Beijing','Shanghai','Guangzhou']*2
df['revenue']=np.random.randint(100,1000,6)
df.index = pd.date_range(start='2020/1/31',end='2020/6/30',freq='m',closed=None)
df
我们将列索引堆到行索引后面形成MultiIndex。
DataFrame.stack(level=- 1, dropna=True)
df.stack().to_frame()
使用unstack后的效果是这样的。
DataFrame.unstack(level=- 1, fill_value=None)
df.unstack().to_frame()
如之前所说,普通Index的DataFrame使用unstack后会把列索引堆到原本的行索引之前形成MultiIndex。
这上面两种情况看起来并不是我们所需要的结果,那我们看看stack和unstack在MultiIndex上的表现是如何的。
# 创建一个MultiIndex的DataFrame
val = np.random.randint(1