pandas-函数(聚合与多表关联)

import pandas as pd
df=pd.read_csv('dataAnalyst_sql.csv')

pandas 函数

(1) groupby 分组 聚合函数

df.groupby(by='city')
<pandas.core.groupby.groupby.DataFrameGroupBy object at 0x0000000007B3BCF8>
Signature: df.groupby(by=None, axis=0, level=None, as_index=True, sort=True, group_keys=True, squeeze=False, observed=False, **kwargs)
Docstring:Group series using mapper (dict or key function, apply given function
df.groupby(by='city').count()   
df.groupby(by='city').max()   
df.groupby(by=['city','workYear']).mean()   #多重索引,在不同城市的不同工作年限下的情况
for k v in df.groupby(by=['city']):  #k表示聚合元素  v表示数据框(聚合操作)
    print(max(v,city)-min(v,city))
    print('**' *10)

(2) 关联函数(多表关联)

data=pd.read_csv('dataAnalyst_sql.csv')
company=pd.read_csv('company_sql.csv')
data.head()
positionIdcitycompanyIdfirstTypesecondTypeeducationindustryFieldpositionAdvantagepositionNamepositionLablessalaryworkYear
02537336上海8581技术数据开发硕士移动互联网知名平台数据分析师['分析师', '数据分析', '数据挖掘', '数据']7k-9k应届毕业生
12427485上海23177技术数据开发本科金融挑战机会,团队好,与大牛合作,工作环境好数据分析师-CR2017-SH2909['分析师', '数据分析', '数据挖掘', '数据']10k-15k应届毕业生
22511252上海57561设计数据分析本科移动互联网时间自由,领导nic数据分析师['分析师', '数据分析', '数据']4k-6k应届毕业生
32427530上海7502市场与销售数据分析本科企业服务,数据服务五险一金 绩效奖金 带薪年假 节日福利大数据业务分析师【数云校招】['商业', '分析师', '大数据', '数据']6k-8k应届毕业生
42245819上海130876技术软件开发本科其他在大牛下指导BI开发/数据分析师['分析师', '数据分析', '数据', 'BI']2k-3k应届毕业生
company.head()
companyIdcompanyFullNamecompanyLabelListcompanyShortNamecompanySizebusinessZonesUnnamed: 6Unnamed: 7Unnamed: 8
08581纽海信息技术(上海)有限公司['技能培训', '节日礼物', '带薪年假', '岗位晋升']1号店2000人以上['张江']NaNNaNNaN
123177上海点荣金融信息服务有限责任公司['节日礼物', '带薪年假', '岗位晋升', '扁平管理']点融网500-2000人['五里桥', '打浦桥', '制造局路']NaNNaNNaN
257561上海晶樵网络信息技术有限公司['技能培训', '绩效奖金', '岗位晋升', '管理规范']SPD50-150人['打浦桥']NaNNaNcompanySho+I4rtName
37502杭州数云信息技术有限公司上海分公司['绩效奖金', '股票期权', '五险一金', '通讯津贴']数云150-500人['龙华', '上海体育场', '万体馆']NaNNaNNaN
4130876上海银基富力信息技术有限公司['年底双薪', '通讯津贴', '定期体检', '绩效奖金']银基富力15-50人['上海影城', '新华路', '虹桥']NaNNaNNaN

(1) concat # 堆叠

应用场景:比如有10个月的销售明细,我们在处理的时候将10个月的明细合并在一起(每张表具有相同的格式) 常用上下堆叠,左右堆叠常用merge

pd.concat([company,data])   #将两张表的字段全部合并,没有以空代替(上下拼接)
pd.concat([company,data], axis=1)   #将两张表的字段全部合并,没有以空代替(左右拼接)
Signature: pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True)
Docstring:
Concatenate pandas objects along a particular axis with optional set logic
df1=pd.DataFrame(
    {
        'A':list('abcd'),
        'B':list('efgh')
    }
)
df1
AB
0ae
1bf
2cg
3dh
df2=pd.DataFrame(
    {
        'C':list('abcd'),
        'D':list('efgh')
    }
)
df2
CD
0ae
1bf
2cg
3dh
pd.concat([df1,df2])
E:\Anaconda3\lib\site-packages\ipykernel_launcher.py:1: FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.

To accept the future behavior, pass 'sort=False'.

To retain the current behavior and silence the warning, pass 'sort=True'.

  """Entry point for launching an IPython kernel.
ABCD
0aeNaNNaN
1bfNaNNaN
2cgNaNNaN
3dhNaNNaN
0NaNNaNae
1NaNNaNbf
2NaNNaNcg
3NaNNaNdh
pd.concat([df1,df2],axis=1)  #左右堆叠
ABCD
0aeae
1bfbf
2cgcg
3dhdh

(2) join

company.join(data)
Signature: company.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
    
Docstring: Join columns with other DataFrame either on index or on a key column.
    Efficiently Join multiple DataFrame objects by index at once by

(3) merge #键值

data.merge(right=company,how='inner', on='companyId')  #right表示与哪张表关联,左关联右,返回在左边  on通过哪几个键值(列)进行关联
### data 的在左边,company在右边
Signature: data.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False,
                      suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
Docstring:
data.rename()  #修改字段名称

Signature: data.rename(mapper=None, index=None, columns=None, axis=None, copy=True, inplace=False, level=None)

Docstring:Alter axes labels.

col=list(data.columns)     #提取列名
col
['positionId',
 'city',
 'companyId',
 'firstType',
 'secondType',
 'education',
 'industryField',
 'positionAdvantage',
 'positionName',
 'positionLables',
 'salary',
 'workYear']
col=list(data.columns)     #提取列名
col[0]='id'   #修改id名
data.columns=col   #赋值
data.merge(right=company,how='inner', left_on='id', right_on='companyId')    #当两表的key名不一致时
pd.merge()
Signature: pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, 
                    suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值