导入模块
import numpy as np
import pandas as pd
一.transform 聚合函数
在pandas 或者numpy 中没有现成的函数可以使用,可以通过transform
data=pd.read_excel(r'地址')
'''
读取的前16条数据:
dishes_name itemis_add counts amounts cost \
0 蒜蓉生蚝 0 1 49 NaN
1 蒙古烤羊腿 0 1 48 NaN
2 大蒜苋菜 0 1 30 NaN
3 芝麻烤紫菜 0 1 25 NaN
4 蒜香包 0 1 13 NaN
5 白斩鸡 0 1 88 NaN
6 香烤牛排 0 1 55 NaN
7 干锅田鸡 0 1 88 NaN
8 桂圆枸杞鸽子汤 0 1 48 NaN
9 番茄有机花菜 0 1 32 NaN
10 白饭/大碗 0 1 10 NaN
11 芝士烩波士顿龙虾 0 1 175 NaN
12 葱姜炒蟹 0 1 109 NaN
13 皮蛋瘦肉粥 0 1 16 NaN
14 爆炒鳝碌 0 1 55 NaN
15 干锅田鸡 0 1 88 NaN
'''
data2=data['counts'].transform(lambda x:x*2)
def transforml(value):
values=value*2
return values
data2=data['counts'].transform(transforml)
二.分组
groupby(by='columns')
三.透视表
'''
# pd.pivot_table(数据表,index索引,一系列参数)
参数:
index: 行分组键,分完组以后,分组键的取值在行索引的位置
aggfunc: 聚合函数==>和agg方法一致
values:指定想要进行分组的列
columns:指定想要进行分组的行
fill_value:将数据为nan的值填充为对应的值
margins:表示汇总开关,默认是false,当margins为True时,添加汇总的行与列
margins_name:'All' 汇总的列或者行columns,index的索引
'''
data3=pd.pivot_table(data,index=['order_id','amounts'],aggfunc=[np.mean,np.sum],values=['counts','add_inprice']).head()
data4=pd.pivot_table(data,columns=['order_id'],aggfunc=[np.mean],values=['counts','add_inprice']).head()
pd.pivot_table(data,
columns='order_id',
index='dishes_name',
values='counts',
aggfunc=np.sum,
fill_value='ss'
)
四.交叉表
data5=pd.crosstab(
index=data['order_id'],
columns=data['dishes_name'],
values=data['counts'],
aggfunc=np.sum
)
五.表格合并方法
(1)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', 'K2'],
'key2': ['K0', 'K0', 'K0', 'K0'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
data6=pd.concat((left,right),
axis=0,
join='outer'
)
(2)表合并,解决行索引没有意义的情况下,数据不匹配问题(解决concat中横向拼接问题)
'''当两个表中的主键不一样时,left_on=,right_on=,一一对应 '''
left2=left.rename(columns={'key1':'key222','key2':'dsjjdj'},
inplace=False
)
六.重叠合并
df1作为主表,用df2填充df1,当df2与df1不一致时默认主表数据
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)
df3=df1.combine_first(df2)
print(df1,df2,df3)