Python_数据科学库_数据的合并与分组聚合

文章目录

1 数据合并之join

join:默认情况下他是把行索引相同的数据合并到一起

Python_数据科学库_数据的合并与分组聚合
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.ones((2,4)),index=['A','B'],columns=list('abcd'))
df2 = pd.DataFrame(np.zeros((3,3)),index=['A','B','C'],columns=list('xyz'))
print(df1)

print(df2)

df3 = df1.join(df2)
print(df3)

df4 = df2.join(df1)
print(df4)

2 数据合并之merge

merge:按照指定的列把数据按照一定的方式合并到一起

  • 当两个dataframe具有相同的column时,若两个column中没有相同的value,则会merge一个空的dataframe
  • 直接使用merge合并两个DataFrame, res = pd.merge(left,right) ,不加任何属性参数的情况下,默认是inner合并
  • res = pd.merge(left,right,on=’key’),当加上on属性的时候,是基于key列来合并,通过key的每一个值来查找左右两边的数据, 组成新的DataFrame
  • merge操作实现两个DataFrame之间的合并。merge的使用方法及参数解释如下:
pd.merge(left, right, on=None, how='inner', left_on=None, right_on=None, left_index=False, right_index=False,
     sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
  • left和right:第一个DataFrame和第二个DataFrame对象,merge只能实现两个DataFrame的合并,无法一次实现多个合并
  • how:合并的方式,默认为inner取参考column的交集,outer取并集保留所有行;outer、left、right中的缺失值都以NaN填充;left按照左边对象为参考进行合并即保留左边的所有行,right按照右边对象为参考进行合并即保留右边所有行,
  • left_on=None和right_on=None:以上on是在两个df有相同的column的情况下使用,如果两个df没有相同的column,使用left_on和right_on分别指明左边和右边的参考column
  • left_index和right_index:指定是否以索引为参考进行合并
  • sort:合并结果是否按on指定的参考进行排序
  • suffixed:合并后如果有重复column,分别加上什么后缀
  • on:指定参考column,如果不指定默认为None,以两者相同列的最多数为参考; *index重新生成为从0开始的整数。
import pandas as pd
df1 = pd.DataFrame({'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']},index=['k','l','m','n',])
df2 = pd.DataFrame({'key1':['a','B','c','d'],'key2':['e','f','g','H'],'key4':['i','j','K','L']},index = ['p','q','u','v'])
print(df1)

print(df2)

print(pd.merge(df1,df2,on='key1'))

print(pd.merge(df1,df2,on='key2'))

print(pd.merge(df1,df2,on=['key1','key2']))

print(pd.merge(df1,df2))

  • how:指定合并方式,如果不指定默认为inner

对于outer、left、right来说可能会出现缺失值,全部以NaN填充。

import pandas as pd
df1 = pd.DataFrame({'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']},index=['k','l','m','n',])
df2 = pd.DataFrame({'key1':['a','B','c','d'],'key2':['e','f','g','H'],'key4':['i','j','K','L']},index = ['p','q','u','v'])
print(df1)

print(df2)

print(pd.merge(df1,df2,how='inner'))

print(pd.merge(df1,df2,how='outer'))

print(pd.merge(df1,df2,how='left'))

print(pd.merge(df1,df2,how='right'))

  • left_on和right_on:默认都为False,但是如果两个DataFrame没有相同的column而又需要对它们的按列合并,则需要使用left_on和right_on分别指明两边的参考列;index重新生成为从0开始的整数。
import pandas as pd
df1 = pd.DataFrame({'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']},index=['k','l','m','n'])
df2 = pd.DataFrame({'key4':['a','B','c','d'],'key5':['e','f','g','H'],'key6':['i','j','K','L']},index = ['p','q','u','v'])
print(df1)

print(df2)

df3 = pd.merge(df1,df2,left_on='key1',right_on='key4')
print(df3)

3 分组

现在我们有一组关于全球星巴克店铺的统计数据,如果我想知道美国的星巴克数量和中国的哪个多,或者我想知道中国每个省份星巴克的数量的情况,那么应该怎么办?

在pandas中类似的分组的操作我们有很简单的方式来完成

df.groupby(by=”columns_name”)

grouped = df.groupby(by=”columns_name”)

grouped是一个DataFrameGroupBy对象,是可迭代的

grouped中的每一个元素是一个元组

元组里面是(索引(分组的值),分组之后的DataFrame)

对于groupby对象数据,我们还可以进行一些统计操作,比如count()、sum()、mean()等方法,在经过这些方法处理之后,会生成一个新的DataFrame()数据帧,这个数据帧每一个记录的index是刚才groupby分类依据那一列的值,而一个记录中每个字段的值则是根据统计计算出来这个分类当中的统计参数。相当于用这个数代表了这个类的特点。

file_path = "starbucks_store_worldwide.csv"

df = pd.read_csv(file_path)
print(df.head(1))

grouped = df.groupby(by="Country")

country_count = grouped["Brand"].count()
print(country_count)
print(type(country_count))

print(country_count["US"])
print(country_count["CN"])

china_data = df[df["Country"] =="CN"]
print(china_data)
grouped = china_data.groupby(by="State/Province").count()["Brand"]
print(grouped)

grouped = df["Brand"].groupby(by=[df["Country"],df["State/Province"]]).count()
print(grouped)
print(type(grouped))

grouped1 = df[["Brand"]].groupby(by=[df["Country"],df["State/Province"]]).count()
grouped2= df.groupby(by=[df["Country"],df["State/Province"]])[["Brand"]].count()
grouped3 = df.groupby(by=[df["Country"],df["State/Province"]]).count()[["Brand"]]

print(grouped1,type(grouped1))
print("*"*100)
print(grouped2,type(grouped2))
print("*"*100)
print(grouped3,type(grouped3))

print(grouped1.index)

4 索引和复合索引

简单的索引操作:

获取index:df.index

指定index :df.index = [‘x’,’y’]

重新设置index : df.reindex(list(“abcedf”)) #相当于从df中取了几行,原df不变

指定某一列作为index :df.set_index(“Country”,drop=False)

返回index的唯一值:df.set_index(“Country”).index.unique() #索引可以重复

import pandas as pd
a = pd.DataFrame({'a': range(7),'b': range(7, 0, -1),'c': ['one','one','one','two','two','two', 'two'],'d': list("hjklmno")})
print(a)

b = a.set_index(['c','d'])
print(b)

print('*'*100)
print(b.loc['one'])

print(b.loc['one'].loc['j'])

c = b['a']
print(c)

print(c['one']['j'])
print(c['one','h'])

Original: https://blog.csdn.net/qq_22304493/article/details/118003034
Author: python小皓
Title: Python_数据科学库_数据的合并与分组聚合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/743743/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 基于深度学习的命名实体识别研究综述——论文研读

    今天又是因为疫情被封在医院的一天。今天我们来回顾一下NER的一些基础知识。最近分享的都是一些中文文章,也都是一下自己看的觉得有点意义的文章。后续有时间,我会分享一些英文论文的研读。…

    Python 2023年10月9日
    068
  • python pandas库用法_Python使用Pandas库常见操作详解

    本文实例讲述了Python使用Pandas库常见操作。分享给大家供大家参考,具体如下: 1、概述 Pandas 是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构…

    Python 2023年8月19日
    049
  • 【算法入门&搜索法】走迷宫|单源最短路径1

    ✅作者简介:热爱后端语言的大学生,CSDN内容合伙人✨精品专栏:C++面向对象🔥系列专栏:算法百炼成神 文章目录 🔥前言 1、AB20 走迷宫 * 1.1、解题思路 1.2、代码实…

    Python 2023年10月27日
    035
  • 【Python】函数Д

    🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星T…

    Python 2023年8月2日
    050
  • dateframe取某列数据_DataFrame数据选取全攻略

    pandas库的DataFrame,作为一种非常强大的数据处理手段,一直以来无论是从整个库的API设计和性能,都给我非常大的惊喜,但是,在由生疏到慢慢熟练的过程中,发现在利用Dat…

    Python 2023年8月6日
    061
  • MOBA电竞游戏:Zuki Moba

    欢迎各位新老朋友,我们细说P2E(Play to Earn),为广大用户提供一个深入了解链游的平台。不定期的跟大家分享一些精品项目和最新链游方向,也欢迎大家关注我们。我们第二十一期…

    Python 2023年9月19日
    047
  • ONNX模型分析与使用

    文章首发于我的 github 仓库-cv算法工程师成长之路,欢迎关注我的公众号-嵌入式视觉。本文大部分内容为对 ONNX 官方资料的总结和翻译,部分知识点参考网上质量高的博客。 一…

    Python 2023年10月28日
    061
  • python多线程同步售票系统解决思路

    解决问题场景:假如剩余1000张电影票需要售卖,同时有10家电影App来售卖这1000张电影票。主要的逻辑实现过程是什么,要求使用python技术栈进行解题? 【阅读全文】 1、分…

    Python 2023年11月2日
    059
  • pandas数据处理之数据转换(映射map、替换replace、重命名rename)

    我们在数据处理的过程中经常碰到需要对数据进行转换的工作,比如将原来数据里的字典值根据字典转义成有意义的说明,将某些数据转换成其他的数据,将空值转换成其他值,将数据字段名进行重命名等…

    Python 2023年8月7日
    040
  • python读取csv文件并添加索引

    对于csv文件进行处理一个重要的步骤是为数据添加索引,方便后续的数据操作 这里我们使用pandas库中的read_csv()函数,在读取csv数据的同时可以对其添加行索引和列索引。…

    Python 2023年8月19日
    042
  • Andrej Karpathy | 详解神经网络和反向传播(基于 micrograd)

    只要你懂 Python,大概记得高中学过的求导知识,看完这个视频你还不理解反向传播和神经网络核心要点的话,那我就吃鞋:D Andrej Karpathy,前特斯拉 AI 高级总监、…

    Python 2023年10月28日
    040
  • Django系列3 — 快速部署开发环境

    快速部署Django开发环境 1、卸载python 2、Python3.8 安装 3、Pycharm 安装 4、Django 安装(虚拟环境) 5、Mysql 安装 * 5.1 安…

    Python 2023年8月5日
    063
  • Django笔记三十之log日志记录详解

    这一节介绍在 Django 系统里使用 logging 记录日志 以下是一个简单的 logging 模块示例,可以先预览一下,接下来会详细介绍各个模块的具体功能: LOGGING …

    Python 2023年8月6日
    034
  • Numpy基础

    ​ 进行科学计算(支持矩阵和ndarray数组对象),内存连续(访问效率高), 支持并行运算,有两种存储风格(F风格—列优先存储, C风格—行优先存储) import numpy …

    Python 2023年8月25日
    027
  • Scrapy中间件的使用-爬取豆瓣top250/PM2.5历史数据

    文章目录 python编程快速上手(持续更新中…) python爬虫从入门到精通 Scrapy爬虫框架 * 1. scrapy中间件的分类和作用 – 1.1…

    Python 2023年10月3日
    039
  • Qt下的视频实时传输

    此文用于记录Qt远程采集摄像头画面的办法,以备忘记,Qt远程采集画面可以实现远程监控,视频通话和一些远程识别功能;本次以TCP作为通信手段,实现传输功能,Qt版本使用15.5.2。…

    Python 2023年9月16日
    0110
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球