#聚合函数
# (1)numpy/pandas 统计分析方法
# (2)agg
# (3)transform 转换 ufunc 在pandas 或者numpy中没有现成的聚合函数可以使用
# 可以通过transfrom自定义函数
import pandas as pd
import numpy as np
# data = pd.read_excel('meal_order_detail.xlsx')
# data = data['counts'].transform(lambda x:x*2)
# print(data)
#分组
# groupby(by ='columns')
#透视表 pivot_table()
# data 对哪张表 传入哪张表
# index 行分组件,意思是 按照给的这个列表中的元素进行分组,然后这个元素作为生成后的行索引。
# aggfunc :聚合函数 和 agg方法一致
#values :指定想要进行聚合的列
#columns 列分组键 和 index用法相同
#fill_values 将nan填充为 对应的值
#margins 表示汇总开关,默认是False 在行列的最后 添加 一行列 来汇总表格中的信息
# margins_name 汇总行列的名称 默认是all
# print(pd.pivot_table(data, index='dishes_name', columns='order_id', aggfunc=np.sum, values='counts'
# ,fill_value= 0,margins=True,margins_name='all'))
#交叉表 (了解)
# print(pd.crosstab(index=data['order_id'], columns=data['dishes_name'], values=data['counts']
# , aggfunc=np.sum))
# 重点 表格合并方法
# concat
left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
'key2': ['K0', 'K1', 'K0', 'K1'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K3'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
# concat:join = 'outer' 外连接,求并集 inner 内连接,求交集
# print(pd.concat((left, right), axis=0))
# 表合并
# 解决行索引没有意义的情况下,数据行不匹配的问题,(解决concat中横向拼接问题)
# print(pd.merge(left, right, on='key1',how='right'))
# on必须是两张表中公共的字段,on 字段只会保留一列
# merge参数为 how 参数为inner (内连接) 所以匹配不到的不会显示
#how = left 左连接 坐标中所有的键都保留 right 右链接 以右表为主
# 多重主键 on = ['key1','key2']
# left_on 左表中的主键 right_on 右表中的主键 当两表主键名称不同时
# pd.merge(left,right,on=['key1','key2'],)
#更改表格的方法
# inplace True 更改原表
# left.rename(columns={'key':'key222'},inplace=False)
dict1 = {'ID':[1,2,3,4,5,6,7,8,9],
'System':['W10','w10',np.nan,'w10',np.nan,np.nan,'w7','w7','w8']}
dict2 = {'ID':[1,2,3,4,5,6,7,8,9],
'System':[np.nan,np.nan,'w7','w7','w7','w7','w8',np.nan,np.nan]}
df1 = pd.DataFrame(dict1)
df2 = pd.DataFrame(dict2)
# df1.combine_first(df2) df1中缺失的数据由对应的df2表格中的数据填充,若对方1中不为空,则不会改变。
print(df1)
pandas 基础操作(3)
最新推荐文章于 2021-12-31 22:12:26 发布