Python数据分析笔记 3

Python数据分析笔记 3


"""
pandas 可以将Pandas理解为python中的Excel操作

pandas中有两种数据类型,分别为Series和DataFrame

"""
"""
生成Series(series可以看做是一维的dataframe)
由values和index组成
从另一个角度考虑Series,可以认为它是一个长度 固定且有序的字典
如果传入的是字符串类型的数据,series返回的dtype 是object
如果传入的是数字型的数据,series返回的dtype 是int64
"""
import pandas as pd
eva = {'凌波丽': 0, '碇真嗣': 1}
eva_s = pd.Series(eva)
eva_s
凌波丽    0
碇真嗣    1
dtype: int64
eva_s.values
array([0, 1], dtype=int64)
eva_s.index
Index(['凌波丽', '碇真嗣'], dtype='object')
# 取值 :我们可以通过索引从Series当中进行切片取值
#print(eva_s[0])
print(eva_s[0:1])

凌波丽    0
dtype: int64
#当然,使用布尔索引也可以。DataFrame部分会具体讲解布尔索引
eva_s == 0
凌波丽     True
碇真嗣    False
dtype: bool
eva_s[eva_s == 1]
碇真嗣    1
dtype: int64
#####################################################################################################################
####################################################################################################################
######################################################################################################################
### 数据类型--DataFrame #######

# Pandas

df.column、df['column']      #  注释:涉及选取多列,需要采用嵌套列表形式[['x','y']]


df = pd.read_csv('./table_name.csv')
"""
read_csv()
path:指明所需读取表格所在的文件路径。若表格与代码文件在同一文件夹,仅需'./表格名称.csv'。若不在同一文件夹,需要右键表格属性,查看表格路径,在文件路径前加r,如r'C:\Users\dsx\cpc.csv'。
sep:分隔符,常见为逗号,如sep=','
usecols:返回指定的列,如usecols=['曝光数','进店数']
encoding:指定编码格式,如encoding = 'gbk
"""


df = pd.read_excel('./table_name.xlsx')
"""
read_excel()
sheet_name:指定要读取的sheet,如sheet_name='sheet2'
index_col:指定某列为索引,如index_col='日期'
usecols:返回指定的列,如usecols=['曝光数','进店数']
"""
pd.unique(df.column)     # unique()对于单个字段去重,如unique(cpc.日期)
pd.drop_duplicates()	# drop_duplicates()对于多个字段去重,如drop_duplicates(['曝光数','进店数'])。若对于整个DataFrame去重,如cpc.drop_duplicates()

import numpy as np
import pandas as pd
# import pymysql
pd.set_option('display.max_rows', 9999)
pd.set_option('display.max_columns', 9999)
pd.set_option('display.float_format', lambda x: '%.3f' % x)


import numpy as np
import pandas as pd


#    series 中的 replace map append 函数

"""
cpc['符号'] = '%'
cpc['下单率'] = (round(cpc.门店下单量/cpc.门店访问量,1)*100).map(str).str.cat( cpc['符号'])
cpc['下单率']
cpc[['平台门店名称','下单率']]
"""
v = ['%']*3
import pandas as pd
eva = {'凌波丽': 10, '碇真嗣': 20}
eva_s = pd.Series(eva)

print(eva_s.replace(20,30),eva_s)  # replace 函数不改变原series

eva_s.map(str)
print(eva_s.dtype,eva_s.map(str).dtype)  # map 函数不改变原series
print(eva_s.map(lambda x:x+30))


eva_m = pd.Series({'明日香':30})
#  eva_s.append(eva_m)  # append 也不改变原series(ndarray当中没有append方法)
#  产生报错 :AttributeError: 'Series' object has no attribute 'append' 似乎新版series删除了 append传操作


# series.str.cat() 的用法
e = ['%','%']
eva_s.map(str).str.cat(e)   # 默认sep = ''
#eva_s.map(str).str.cat(['%','%'],sep ='')
凌波丽    10
碇真嗣    30
dtype: int64 凌波丽    10
碇真嗣    20
dtype: int64
int64 object
凌波丽    40
碇真嗣    50
dtype: int64





凌波丽    10%
碇真嗣    20%
dtype: object

# cat 命令 可以文件中的所有行连接起来并按顺序输出

"""
# 例如我们有一个名为example.txt 文件中包含以下内容
Hello
World

运行命令 $ cat example.txt 可以得到以下输出:
Hello
World

# 合并文件内容的命令: ¥ cat 文件1 文件2 ... > 目标文件
"""
########################################## 样例演示 ##############################################
import numpy as np
import pandas as pd
#import pymysql
pd.set_option('display.max_rows', 9999)
pd.set_option('display.max_columns', 9999)
pd.set_option('display.float_format', lambda x: '%.3f' % x)

# - 1【select】筛选门店名称并且去重
# select distinct(平台门店名称) 
# from ddm.cpc

cpc = pd.read_csv('./cpc.csv',sep = ',',encoding = 'gbk')
#确保代码文件和表格文件在同一路径下
pd.Series(pd.unique(cpc['平台门店名称']))
0           蛙小辣火锅杯(合生汇店)
1        蛙小辣美蛙火锅杯(大宁国际店)
2      蛙小辣·美蛙火锅杯(长风大悦城店)
3      蛙小辣·美蛙火锅杯(虹口足球场店)
4        利芳·一人食大盘鸡(国定路店)
5      蛙小辣·美蛙火锅杯(虹口足球场店)
6         蛙小辣·美蛙火锅杯(宝山店)
7           蛙小辣火锅杯(五角场店)
8         蛙小辣·美蛙火锅杯(真如店)
9        蛙小辣·美蛙火锅杯(龙阳路店)
10        蛙小辣·美蛙火锅杯(大宁店)
11           蛙小辣火锅杯(真如店)
12      蛙小辣美蛙火锅杯(亚龙美食城店)
13       蛙小辣·美蛙火锅杯(芳华路店)
14         蛙小辣火锅杯(龙阳广场店)
15           蛙小辣火锅杯(徐汇店)
16                蛙小辣火锅杯
17           利芳大盘鸡(国定路店)
18        蛙小辣美蛙火锅杯(五角场店)
19        蛙小辣火锅杯(金煌美食城店)
20         蛙小辣美蛙火锅杯(真如店)
21          蛙小辣火锅杯(五角场店)
22           蛙小辣火锅杯(宝山店)
23       蛙小辣火锅杯麻辣烫(五角场店)
24       蛙小辣·美蛙火锅杯(五角场店)
25     蛙小辣·美蛙火锅杯麻辣烫(宝山店)
26    蛙小辣·美蛙火锅杯麻辣烫(五角场店)
27    蛙小辣·美蛙火锅杯麻辣烫(五角场店)
28         拌客干拌麻辣烫(武宁路店)
29        拌客·干拌麻辣烫(武宁路店)
30         拌客干拌麻辣烫(武宁路店)
dtype: object
"""
运算符	                  pandas	                     注释	                                         sql
>	              df.query('column>x')	     通过字符串表达式对列进行筛选                  	       where column > x
=	              df.query('column=x')		                                                       where column = x
<	              df.query('column<x')		                                                       where column < x

between..and..	  df[df.column.between(x,y)]	参数:right/left:左右边界的值,如between(x,y)        where column between x and y
                                        inclusive:确定是否包括边界值,若包括inclusive = True;
                                        若不包括,inclusive = False。默认为True

	
in	           df[df.column.isin([x,y,z...])]	判断指定字段中的值是否包含在所传入的列表当中,	       where column in (x,y,z...)
                                                  并返回一个全为Bool值的Series
                                                  
not in	       df[~df.column.isin([x,y,z...])]	      isnotin()	                                   where column not in (x,y,z...)
is null	            df[df.column.isnull()]	     检测指定字段的缺失值,若出现Nan,则映射到True值,
                                              非空则映射到False。并返回与字段形状相同的Bool值的Series	where column is null
is not null	     df[~df.column.isnull()]	            notna()	                                    where column is not null
and	            df.query('x<column&column<y')	 python中使用&表示 与	                            where x<column and column <y
or	            df.query('x<column|column<y')	 python中使用|表示 或	                            where x<column or column <y
not	             在df前加一个 ~	                python中使用~表示 非	                                放在配合使用的运算符前
"""
"""
模糊查询                    	pandas	                  注释	                                                  sql
like	    df[df.column.str.contains('xxx')]	判断所传入的字符串是否包含在我们指定字段的内容中,
                                                    并返回与字段形状相同的Bool值的Series
                                                参数:pat:字符串,如左侧实例
                                                case:是否区分pat中的大小写,若区分,则case = True;
                                                若不区分,则case = False。默认为True,区分。                	where column like '%xxx%'
            df[df.column.str.startswith('x')]	判断指定字段的内容是否以传入的字符串为开头,
                                                  并返回与字段形状相同的Bool值的Series
                                                参数:pat:字符串,如左侧实例                                   where column like 'x%'
            df[df.column.str.endswith('x')]	判断指定字段的内容是否以传入的字符串为结尾,
                                                并返回与字段形状相同的Bool值的Series
                                                    参数:pat:字符串,如左侧实例                               where column like '%x'
"""
# query只能进行><=的筛选,其他筛选需要使用布尔索引完成
#样例演示
# - 1【运算符】and:查找gmvroi>7 且 gmvroi<8 的门店ID跟名字
# select  门店ID,平台门店名称
# from    ddm.cpc
# where   gmvroi <8.0
# and     gmvroi >7.0

# - 2【运算符】between and:查找门店gmvroi介于[7,8]的门店ID跟名字
# select 	门店ID,平台门店名称
# from 	ddm.cpc
# where 	gmvroi between 7.0 and 8.0

cpc.query('gmvroi>7.0&gmvroi<8.0')[['门店ID','平台门店名称']]
#query:where
#&:and
# - 3【运算符】in:查找门店gmvroi等于[7,8]的门店ID跟名字
# select 	门店ID,平台门店名称
# from 	ddm.cpc
# where 	gmvroi in(7.0,8.0)

cpc[['门店ID','平台门店名称']][cpc.gmvroi.isin([7.0,8.0])]
#cpc[['门店ID','平台门店名称']]:select 门店ID,平台门店名称
#[]内cpc:from
#gmvroi.isin():where gmvroi in()
门店ID平台门店名称
3788052557蛙小辣火锅杯(真如店)
4882001053699蛙小辣·美蛙火锅杯(大宁店)
10128491999蛙小辣火锅杯(宝山店)
10648491999蛙小辣火锅杯(宝山店)
# - 4【运算符】null:查找门店实收为空的门店ID跟名字
# select 	门店ID,平台门店名称
# from 	ddm.cpc
# where 	门店实收 is null

cpc[['门店ID','平台门店名称']][cpc.门店实收.isnull()]
#cpc[['门店ID','平台门店名称']]:select 门店ID,平台门店名称
#[]内cpc:from
#门店实收.isnull():where 	门店实收 is null
门店ID平台门店名称
3062001104355蛙小辣·美蛙火锅杯(宝山店)
3322000555792蛙小辣·美蛙火锅杯(虹口足球场店)
8058491999蛙小辣火锅杯(宝山店)
8068491999蛙小辣火锅杯(宝山店)
8078491999蛙小辣火锅杯(宝山店)
8088491999蛙小辣火锅杯(宝山店)
8098491999蛙小辣火锅杯(宝山店)
8108491999蛙小辣火锅杯(宝山店)
10862001104355蛙小辣·美蛙火锅杯麻辣烫(宝山店)
# - 5【模糊查询】like:查找名称带有宝山的门店
# select  distinct(平台门店名称)
# from    ddm.cpc
# where 平台门店名称 like '%宝山%'

pd.Series(cpc['平台门店名称'][cpc.平台门店名称.str.contains('宝山')].unique())
#cpc['平台门店名称']:select 平台门店名称
#[]内cpc:from
#平台门店名称.str.contains('宝山'):平台门店名称 like '%宝山%'
#unique():distinct
#pd.Series:将结果转换为Series类型
0       蛙小辣·美蛙火锅杯(宝山店)
1          蛙小辣火锅杯(宝山店)
2    蛙小辣·美蛙火锅杯麻辣烫(宝山店)
dtype: object
"""
聚合函数	         pandas	             sql
AGV()	    df.column.mean()	 select avg(column) from df
COUNT()	    df.column.count()	 select count(column) from df
MAX()	    df.column.max()	     select max(column) from df
MIN()	    df.column.min()	     select min(column) from df
SUM()	    df.column.sum()	     select sum(column) from df
"""
"""
分组筛选                  	pandas	                                           注释	                              sql
group	     df.groupby('column').agg(列名 = ('values','sum'))
             df.groupby(['column1','column2']).agg(列名 = ('values','sum'))                                        group by column
                                                                    groupby('column'):指定我们的分组字段
                                                                             agg():聚合函数
                                                                        列名:我们对聚合字段名别名
                                                                        'value':数值型字段的名字
                                                                   'sum':聚合函数的名字,也可以是max、min等	
                                                                   
having	    df.groupby('column').agg(列名 = ('values','sum')).query('列名>x')	通过对分组聚合后形成的表格,
                                                                                  进行query条件筛选	             having sum(value)>x
"""
# - 1【聚合函数】avg:查找各个门店的平均实收
# select  	平台门店名称,avg(门店实收) as 平均实收
# from    	ddm.cpc
# group by 	平台门店名称

cpc.groupby('平台门店名称').agg(平均实收 = ('门店实收','mean'))
#cpc:from
#groupby('平台门店名称'):group by 平台门店名称
#agg(平均实收 = ('门店实收','mean')):avg(门店实收) as 平均实收
#最终结果会显示所有提到的字段
平均实收
平台门店名称
利芳·一人食大盘鸡(国定路店)1167.085
利芳大盘鸡(国定路店)1003.667
拌客·干拌麻辣烫(武宁路店)1694.323
拌客干拌麻辣烫(武宁路店)798.885
拌客干拌麻辣烫(武宁路店)1407.018
蛙小辣·美蛙火锅杯(五角场店)422.050
蛙小辣·美蛙火锅杯(大宁店)505.522
蛙小辣·美蛙火锅杯(宝山店)957.794
蛙小辣·美蛙火锅杯(真如店)766.085
蛙小辣·美蛙火锅杯(芳华路店)152.650
蛙小辣·美蛙火锅杯(虹口足球场店)819.382
蛙小辣·美蛙火锅杯(龙阳路店)200.935
蛙小辣·美蛙火锅杯麻辣烫(五角场店)347.616
蛙小辣·美蛙火锅杯麻辣烫(宝山店)397.069
蛙小辣·美蛙火锅杯麻辣烫(五角场店)297.900
蛙小辣·美蛙火锅杯(虹口足球场店)799.586
蛙小辣·美蛙火锅杯(长风大悦城店)1072.849
蛙小辣火锅杯1372.333
蛙小辣火锅杯(五角场店)1310.239
蛙小辣火锅杯(徐汇店)177.170
蛙小辣火锅杯(龙阳广场店)467.875
蛙小辣火锅杯麻辣烫(五角场店)263.390
蛙小辣火锅杯(五角场店)484.383
蛙小辣火锅杯(合生汇店)1048.700
蛙小辣火锅杯(宝山店)383.836
蛙小辣火锅杯(真如店)521.149
蛙小辣火锅杯(金煌美食城店)278.333
蛙小辣美蛙火锅杯(五角场店)1227.000
蛙小辣美蛙火锅杯(真如店)367.000
蛙小辣美蛙火锅杯(亚龙美食城店)602.084
蛙小辣美蛙火锅杯(大宁国际店)621.079
# - 2【分组筛选】having:查找实收>10k的门店名称 与 实收,按实收降序
# select  	平台门店名称,sum(门店实收)
# from    	ddm.cpc
# group by 	平台门店名称
# having      sum(门店实收)>10000
# order by    sum(门店实收) desc 

cpc.groupby('平台门店名称').agg(总合 = ('门店实收','sum')).query('总合>10000').sort_values(by = '总合',ascending=False)
#cpc:from
#groupby('平台门店名称'):group by 平台门店名称
#agg(总合 = ('门店实收','sum')):sum(门店实收)
#query('总合>10000'):having sum(门店实收)>10000
#sort_values(by = '总合',ascending=False):order by sum(门店实收) desc 
总合
平台门店名称
拌客·干拌麻辣烫(武宁路店)140628.830
蛙小辣·美蛙火锅杯(宝山店)101526.140
蛙小辣火锅杯(五角场店)99578.180
蛙小辣·美蛙火锅杯(虹口足球场店)71286.210
蛙小辣火锅杯(宝山店)71009.660
蛙小辣·美蛙火锅杯麻辣烫(宝山店)64722.170
利芳·一人食大盘鸡(国定路店)51351.750
蛙小辣·美蛙火锅杯(真如店)44432.920
蛙小辣·美蛙火锅杯(虹口足球场店)43977.250
拌客干拌麻辣烫(武宁路店)36582.480
蛙小辣火锅杯(合生汇店)35655.800
蛙小辣·美蛙火锅杯(长风大悦城店)33258.330
利芳大盘鸡(国定路店)24088.000
蛙小辣美蛙火锅杯(亚龙美食城店)17460.440
蛙小辣火锅杯(真如店)17197.930
蛙小辣美蛙火锅杯(大宁国际店)12421.580
"""
排序	                    pandas                         	        注释	                                         sql
正序	df.sort_values(by = 'column',ascending = True)	  参数:by:选择排序依据的字段。若需要依据多列,            order by column asc
                                                                 则:['x1','x2']。
                                                         ascending:选择排序方式。若正序,则:ascending=True;
                                                                 若倒序,则:ascending=True	
倒序	df.sort_values(by = 'column',ascending = False)		                                                   order by column desc
"""
# - 1【排序】order by:查看每个“武宁路”门店的实收,按实收降序
# select 		平台门店名称,sum(门店实收)
# from		ddm.cpc
# where 		平台门店名称 like '%武宁路%'
# group by 	平台门店名称
# order by 	sum(门店实收) desc

x = cpc[cpc.平台门店名称.str.contains('武宁路')]
x.groupby(cpc.平台门店名称).agg(实收 = ('门店实收','sum')).sort_values(by='实收',ascending = False)
#代码较长,采用两段的形式讲解
#cpc.平台门店名称.str.contains('武宁路'):where 平台门店名称 like '%武宁路%'
#groupby(cpc.平台门店名称):group by 平台门店名称
#sort_values(by='实收',ascending = False):order by sum(门店实收) desc
#agg(实收 = ('门店实收','sum')):sum(门店实收)
实收
平台门店名称
拌客·干拌麻辣烫(武宁路店)140628.830
拌客干拌麻辣烫(武宁路店)36582.480
拌客干拌麻辣烫(武宁路店)1597.770
"""
限制	                    pandas	                注释	            sql
limit x	                   df.head(x)	            取前x行	            limit x
limit x,y	         df[x:y] / df.loc[x:y,'字段']	跳过前x行,取y行  	limit x,y
limit x offsets y	        df[x:y]	                跳过前x行,取y行	    limit x offsets y
"""
# - 习题1【LIMIT】limit x,y:跳过前5行,显示5条数据
# select 	*
# from 	ddm.cpc
# limit 	5,5

cpc[5:10]
updateTime平台i门店ID平台门店名称日期cpc单次点击费用cpc总费用cpc曝光量cpc访问量gmvroi下单转换率单均gmv单均实收实收roi无效订单有效订单自增主键自然曝光量自然访问量门店下单量门店实收门店曝光量门店营业额门店访问量
52019/12/12 11:54饿了么2000555792蛙小辣·美蛙火锅杯(虹口足球场店)2019-12-101.610207.80016281293.1700.09056.10018.2001.0300.00032.0001502706802.000223.00032.000582.4402430.0001795.340352.000
62019/12/12 11:54饿了么2001104355蛙小辣·美蛙火锅杯(宝山店)2019-12-101.250198.50020431596.5200.13064.65025.6202.5800.00054.00015027361108.000254.00052.0001383.3103151.0003491.020413.000
72019/12/12 11:54饿了么2000507076蛙小辣火锅杯(五角场店)2019-12-101.350166.40017051236.4000.15057.81021.2802.3601.00063.00015029671470.000284.00061.0001340.4703175.0003642.100407.000
82019/12/12 11:54饿了么2001020019蛙小辣·美蛙火锅杯(真如店)2019-12-101.510140.3001376934.8200.14053.45014.6601.3200.00046.00015029871394.000245.00046.000674.1602770.0002458.600338.000
92019/12/12 12:49美团8106681蛙小辣·美蛙火锅杯(长风大悦城店)2019-12-091.400195.35023291406.8700.20047.13017.2002.5103.00063.0001503654839.000160.00061.0001083.5903168.0002969.080300.000
# 习题2【LIMIT】查找前5行的门店名称
# select	平台门店名称
# from 	ddm.cpc
# limit	5

cpc.loc[:5,'平台门店名称']
0         蛙小辣火锅杯(合生汇店)
1      蛙小辣美蛙火锅杯(大宁国际店)
2    蛙小辣·美蛙火锅杯(长风大悦城店)
3    蛙小辣·美蛙火锅杯(虹口足球场店)
4      利芳·一人食大盘鸡(国定路店)
5    蛙小辣·美蛙火锅杯(虹口足球场店)
Name: 平台门店名称, dtype: object
# - 习题2【LIMIT】查找门店平均实收>1K的门店名称与平均实收,显示前10条数据,结构按照平均实收降序
# select 		平台门店名称,avg(门店实收) as 平均实收
# from		ddm.cpc
# group by 	平台门店名称
# having      平均实收 > 1000
# order by 	平均实收 desc
# limit       5

cpc.groupby('平台门店名称').agg(平均实收 = ('门店实收','mean')).query('平均实收>1000').sort_values(by = '平均实收',ascending=False).head(5)
#cpc:from ddm.cpc
#groupby('平台门店名称'):group by 平台门店名称
#order by 平均实收 desc:query('平均实收>1000')
#sort_values(by = '平均实收',ascending=False):order by 	平均实收 desc
#head(5):limit 5
#agg(平均实收 = ('门店实收','mean')):avg(门店实收) as 平均实收
平均实收
平台门店名称
拌客·干拌麻辣烫(武宁路店)1694.323
拌客干拌麻辣烫(武宁路店)1407.018
蛙小辣火锅杯1372.333
蛙小辣火锅杯(五角场店)1310.239
蛙小辣美蛙火锅杯(五角场店)1227.000
###子查询
"""
#先做出子查询的筛选条件
a = df1.query("value1==x")['value1']
#再将我们的条件放入isin()方法中
b = df2['column'][df2['value2'].isin(a)]
select column from df2 where value2 in (select value1 from df1 where value1 = x)
"""
# - 1:查找实收(cpc.csv)>1K的门店名称
# select  distinct 平台门店名称
# from    ddm.cpc
# where   门店ID
# in
#     (
#     select  门店ID
#     from    ddm.cpc
#     where   门店实收>1000
#     )

a = cpc.query('门店实收>1000').门店ID					#子查询条件a:门店实收>1k的门店ID
b = cpc['平台门店名称'][cpc['门店ID'].isin(a)].unique()	#将条件放入isin()当中
pd.Series(b)
0           蛙小辣火锅杯(合生汇店)
1        蛙小辣美蛙火锅杯(大宁国际店)
2      蛙小辣·美蛙火锅杯(长风大悦城店)
3      蛙小辣·美蛙火锅杯(虹口足球场店)
4        利芳·一人食大盘鸡(国定路店)
5      蛙小辣·美蛙火锅杯(虹口足球场店)
6         蛙小辣·美蛙火锅杯(宝山店)
7           蛙小辣火锅杯(五角场店)
8         蛙小辣·美蛙火锅杯(真如店)
9            蛙小辣火锅杯(真如店)
10      蛙小辣美蛙火锅杯(亚龙美食城店)
11                蛙小辣火锅杯
12           利芳大盘鸡(国定路店)
13        蛙小辣美蛙火锅杯(五角场店)
14        蛙小辣火锅杯(金煌美食城店)
15         蛙小辣美蛙火锅杯(真如店)
16          蛙小辣火锅杯(五角场店)
17       蛙小辣火锅杯麻辣烫(五角场店)
18       蛙小辣·美蛙火锅杯(五角场店)
19     蛙小辣·美蛙火锅杯麻辣烫(宝山店)
20    蛙小辣·美蛙火锅杯麻辣烫(五角场店)
21    蛙小辣·美蛙火锅杯麻辣烫(五角场店)
22         拌客干拌麻辣烫(武宁路店)
23        拌客·干拌麻辣烫(武宁路店)
24         拌客干拌麻辣烫(武宁路店)
dtype: object
#   表连接
"""
Pandas	                       注释	                             sql

merge	          merge对标我们的sql的join语句                    join
            left,right首先传入我们需要进行连接的两表名称
             left/right on:其次选择左右两表的连接字段
                       how:最后选择连接方式

"""
# 左连接

df3=pd.merge(df1,df2,left_on='column1',right_on='column2',how = 'left')
select * from df
left join df2
on df1.column1 = df2.column2
df3=pd.merge(df1,df2,left_on=['df1_column1,df1_column2'],right_on=['df2_column1','df2_column2'],how = 'left')


shop = pd.read_csv('./shop.csv',encoding='gbk')
# - 1【内连接】:查看门店名称(shop)的实收(cpc)(连接字段:门店ID)
# select 		s.门店名称
# 			,sum(c.门店实收)
# from 		ddm.cpc c
# join 		ddm.shop s
# on 			c.门店ID = s.门店ID
# group by 	s.门店名称
M = pd.merge(cpc,shop,left_on = '门店ID',right_on = '门店ID',how = 'inner')
M.groupby(['门店名称']).agg(门店实收 = ('门店实收','sum'))
#代码较长,分为两段
#pd.merge:join
#cpc,shop:from cpc join shop
#left_on:左表cpc连接字段
#right_on:右表shop连接字段
#how = 'inner':(inner) join
#groupby(['门店名称']):group by s.门店名称
门店实收
门店名称
五角场店156247.320
宝山店13973991.240
怒江路店133033.320
拌客干拌麻辣烫(武宁路店)10907353.880
# - 2 继续题1,采用2个连接字段:门店ID与日期
# select 		s.门店名称
# 			,sum(c.门店实收)
# from 		ddm.cpc c
# join 		ddm.shop s
# on 			c.门店ID = s.门店ID
# and			c.日期 = s.日期
# group by 	s.门店名称

M = pd.merge(cpc,shop,left_on = ['门店ID','日期'],right_on = ['门店ID','日期'],how = 'inner')
M.groupby(['门店名称']).agg(门店实收 = ('门店实收','sum'))
门店实收
门店名称
宝山店43150.250
拌客干拌麻辣烫(武宁路店)129332.680
# 窗口函数

1,分组聚合
df['sum_value'] = df.groupby('column')['value'].transform('sum')
#goupby:partition by
#transform:能够输出与DataFrame行数相同的聚合;
select column,value,
    sum(value) over(partition by column) as sum_value
2,分组排名
df['dense_rank'] = df.groupby('column')['value'].rank(ascending = False,method = 'dense')
#method = 'min':rank()
#method = 'dense':dense_rank()
#method = 'first':row_number()
#rank:1,2,2,4
#dense_rank:1,2,2,3
select column,value,
    dense_rank(value) over(partition by column order by value desc) as dense_rank
# - 1:每一天/不同门店的/门店实收排名,采用日期、门店实收正序输出
# select  日期
#         ,平台门店名称
#         ,门店实收
#         ,rank() over (partition by 日期 order by 门店实收 desc) as rankk
# from    ddm.cpc
# order by 日期,门店实收 desc

cpc['rank'] = cpc.groupby('日期')['门店实收'].rank(method = 'min',ascending=False)
#这里相当于rank() over (partition by 日期 order by 门店实收 desc) as rankk

cpc.sort_values(by = ['日期','门店实收'],ascending=[True,False])[['日期','平台门店名称','门店实收','rank']]
#sort_values(by = ['日期','门店实收'],ascending=[True,False]):order by 日期,门店实收 desc
#[['日期','平台门店名称','门店实收','rank']]:select  日期,平台门店名称,门店实收,rankk

cpc['rank'] = cpc.groupby(['日期','平台i'])['门店实收'].rank(method = 'min',ascending=False)
cpc
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值