数据规整:连接、联合与重塑
后续笔记内容以书本的内容+自身理解的知识进行注释标注记录
# 多次索引
df.index.names = ['key1', 'key2']
df.columns.names = ['state', 'color']
# names 名称属性,多层名称
# 交换层级索引
df.swaplevel('key1', 'key2') # 交换索引
df.sort_index(level=1) # 层级排序 0,1,2
df.swaplevel('key1', 'key2').sort_index(level=0) # 交换+排序
df.sum(level='key1') # 轴上聚合
df.sum(level='color', axis=1)
# DataFrame 列变行索引 - 行索引变列
df.set_index(['c', 'd'], drop=False) # 建立行索引 drop=Flase 保留列
df.reset_index() # 解除行索引
# DataFrame 连接
pd.merge(df1, df2, on=['key1', 'key2'], how='left') # merge 类似数据库连接,on=[] 连接多个键, how='left' 默认inner
pd.merge(df1, df2, left_on='key1', right='key2', suffixes=('_left', '_right'))
# left_on right_on 连接键, suffixes 相同列名后缀
pd.merge(df1, df2, left_index=True,righ_index=True) # 也可left_on 和 right_index 索引连接
```python
df1 = pd.DataFrame(np.random.randn(2),index=['a','b'],columns=['one'])
df2 = pd.DataFrame(np.random.randn(2),index=['c','b'], columns=['two'])
df3 = pd.DataFrame(np.random.randn(2),index=['a','d'], columns=['three'])
df1.join([df2,df3])
# 1.使用df.join 默认左连接
# 2. columns 必须是非重叠列
# 3. coulumns =[],index=[] 只有一行一列也必须是list[]形式
# 沿轴向连接
pd.concat([s1,s2,s3], axis=1, keys=['one', 'two', 'three'])
# 轴1连接 默认轴0 numpy 是 concatenate outer默认
# keys 分组来源 s1,s2,s3
# ignore_index = True 忽略行索引
# 联合重叠数据
np.where(pd.isnull(a), b, a) # a 为空 填充b的值,非空返回a 并集
#Series、DataFrame
a.combine_first(a) # 并集 ,DataFrame 逐列进行操作
# 重述和透视
df.stack() # df - Series 行 - 列
df.unstack(0) # Series - df 列 - 行 默认内层, unstack('state') 指定层
pivoted = ldata.pivot('date', 'item', 'value')
# date 透视 行索引, item 透视列索引, value 填充值
pivoted = ldata.pivot('date', 'item', ['value','value1']) # 返回df 多个值, 变多列
等价: ldata.set_index(['data', 'item']).unstack('item')
pd.melt(df, ['key']) # key 作为分组指标 变一列
pd.melt(df, id_vars=['key'], value_vars=['A','B']) # 列的子集
好的,第八章知识点记录结束