首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

《利用Python进行数据分析·第2版》第8章 数据规整:聚合、合并和重塑8.1 层次化索引8.2 合并数据集8.3 重塑和轴向旋转8.4 总结

许多应用中,数据可能分散许多文件或数据库中,存储的形式也不利于分析。本章关注可以聚合、合并、重塑数据的方法。 首先,我会介绍pandas的层次化索引,它广泛用于以上操作。...数据库风格的DataFrame合并 数据集的合并(merge)或连接(join)运算是通过一个或多个键将行链接起来的。这些运算是关系型数据库(基于SQL)的核心。...df1中的数据多个被标记为a和b的行,而df2中key列的每个值仅对应一行。...NaN two 0.0 1.0 NaN NaN three NaN NaN 5.0 6.0 如果沿着axis=1对Series进行合并keys就会成为DataFrame的列头...(或者其它带有两个多个键的可观察数据,这里,我们的键是date和item)的长格式。

2.6K90
您找到你想要的搜索结果了吗?
是的
没有找到

盘一盘 Python 特别篇 15 - Pivot Table

先看一张图: Pivot 字面意思是支点,即上图中的 index 和 columns 指定的行和列标签,支点可想理解成数据 (values) 在哪个维度上做整合 (aggfunc),再吧 NaN 值用...数据 首先从 csv 读数据。...一个交易员管理一个或多个账户,多个交易员可以和一个交易对手交易,改变 index 里面的标签顺序,先按 Counterparty 合并,再按 Trader 合并。...pd.pivot_table( df, index=["Counterparty","Trader"] ) 到目前为止,我们只设置了 index,那为什么只 Price 和 Quantity 两列上做整合呢...一旦得到最终结果,它本质还是个数据,因此可以使用所有标配函数。下例用 query() 函数来查询名叫 Steven Wang 和 Sherry Zhang 的交易员。

1.3K20

Pandas 2.2 中文官方教程和指南(十三)

| `left_only` | > | 仅在`'right'`数据框中的合并键 | `right_only` | > | 两个数据框中的合并键 | `both` | ```py In [73]: df1...此外,如果整行/列中的所有值都相等,该行/列将从结果中省略。剩余的差异将对齐列上。 在行上堆叠差异。...注意 当在列上进行列连接时,可能是多对多的连接,传递的DataFrame对象上的任何索引将被丢弃。 对于多对多连接,如果一个键组合在两个表中出现多次,DataFrame将具有相关数据的笛卡尔积。...注意 列上连接列时,可能是多对多连接,传递的 DataFrame 对象上的任何索引将被丢弃。 对于多对多连接,如果两个表中一个键组合出现多次,DataFrame 将具有相关数据的笛卡尔积。...此外,如果整行/列中的所有值都相等,该行/列将从结果中省略。剩余的差异将对齐列上。 将差异堆叠在行上。

27710

pandas 分类数据处理大全(附代码)

如果两个object列合并在一起的,没什么意思,因为大家都知道会发生什么,object+ object= object而已。 把object列合并到category列上 接着上面的例子。...我们可以看到,当我们合并时,结果中的合并列会得到category+ object= object。 这显然不行了,又回到原来那样了。我们再试下其他情况。...合并中,为了保存分类类型,两个category类型必须是完全相同的。 这个与pandas中的其他数据类型略有不同,例如所有float64列都具有相同的数据类型,就没有什么区分。...dog 0.501023 gorilla NaN snake NaN Name: float_1, dtype: float64 groupby中得到了一堆空值...略坑,如果数据类型包含很多不存在的,尤其是多个不同的category列上进行分组,将会极其损害性能。

1.1K20

Pandas 的Merge函数详解

日常工作中,我们可能会从多个数据集中获取数据,并且希望合并两个多个不同的数据集。这时就可以使用Pandas包中的Merge函数。...列和索引合并 在上面合并数据集中,merge函数cust_id列上连接两个数据集,因为它是唯一的公共列。我们也可以指定要在两个数据集上连接的列名。...但是如果两个DataFrame都包含两个多个具有相同名称的列,这个参数就很重要。 我们来创建一个包含两个相似列的数据。...如果在正确的DataFrame中有多个重复的键,只有最后一行用于合并过程。例如将更改delivery_date数据,使其具有多个不同产品的“2014-07-06”值。...如果多个最接近的键或精确匹配,使用向后策略。

23730

Python从零开始第三章数据处理与分析python中的dplyr(4)目录

可以选择丢弃,或者合并给最后一列。 fill:可以是'right,要么最右边的列中填充'np.nan值来填充缺失的部分,也可以left中填充np.nan最左边的列中填充。...bycolumns. a >> anti_join(b, by='x1') x1 x2 2 C 3 Binding函数 dfply 同样有类似于pandas.concat() 这样在行和列上用于合并数据框的函数...ignore_index=False) 功能和 pandas.concat([df, other], join=join, ignore_index=ignore_index, axis=0)一致,竖直方向合并数据框...1 B 2.0 NaN 2 C 3.0 NaN 0 A NaN True 1 B NaN False 2 D NaN True 请注意两个数据框的index。...', ignore_index=False) 类似于 pandas.concat([df, other], join=join, ignore_index=ignore_index, axis=1),水平方向合并数据

1.1K20

Pandas Sort:你的 Python 数据排序指南

因此,如果您计划执行多种排序,必须使用稳定的排序算法。 列上对 DataFrame 进行排序 在数据分析中,通常希望根据多列的值对数据进行排序。想象一下,您有一个包含人们名字和姓氏的数据集。...按升序按多列排序 要在多个列上对 DataFrame 进行排序,您必须提供一个列名称列表。...如果两个或更多相同的品牌,则按 排序model。列表中指定列名的顺序对应于 DataFrame 的排序方式。 更改列排序顺序 由于您使用多列进行排序,因此您可以指定列的排序顺序。... DataFrame 中对两个数据集的索引进行排序可以使用其他方法(例如.merge(). ...默认情况下,此参数设置为last,将NaN值放置排序结果的末尾。要改变这种行为,并在你的数据先有丢失的数据,设置na_position到first。

13.9K00

数据 优化查询的目的

频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 ●条件表达式中经常用到的不同值较多的列上建立检索,不同值少的列上不要建立索引。...比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。...●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 ●使用系统工具。如Informix数据库有一个tbcheck工具,可以可疑的索引上进行检查。...为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。...例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引

1K00

数据优化查询的意义

频繁进行排序或分组(即进行group by或order by操作)的列上建立索引。 ●条件表达式中经常用到的不同值较多的列上建立检索,不同值少的列上不要建立索引。...比如在雇员表的“性别”列上只有“男”与“女”两个不同值,因此就无必要建立索引。如果建立索引不但不会提高查询效率,反而会严重降低更新速度。...●如果待排序的列有多个,可以在这些列上建立复合索引(compound index)。 ●使用系统工具。如Informix数据库有一个tbcheck工具,可以可疑的索引上进行检查。...为了避免不必要的排序,就要正确地增建索引,合理地合并数据库表(尽管有时可能影响表的规范化,相对于效率的提高是值得的)。如果排序不可避免,那么应当试图简化它,如缩小排序的列的范围等。...例如,两个表:学生表(学号、姓名、年龄……)和选课表(学号、课程号、成绩)。如果两个表要做连接,就要在“学号”这个连接字段上建立索引

1.1K00

数据库创建索引的条件和注意事项

如果建立聚簇索引,那么需要的空间就会更大;如果非聚簇索引很多,一聚簇索引改变,那么所有非聚簇索引也会跟这变; 当对表中的数据进行增加、删除和修改的视乎,索引也要动态的维护,一旦一个数据改变,并且改变的列比较多...一般来说,应该在下面这些列上创建索引 经常搜索的列上创建索引,能够加快搜索的速度; 作为主键的列上创建索引,需要强制该列的唯一性和组织表中数据的排列结构; 经常被用在连接的列上(主要是外键)建立索引...聚簇索引通过树形结构重排表中的数据来提高数据的访问速度,非聚簇索引通过维护表中的数据指针来提高数据的索引。...) 只能在可以保证实体完整性的列上创建唯一性索引 索引可以包含一个、两个、甚至更多个列。...两个列或者以上列上建立的索引被称作复合索引。

2.6K20

高级数据结构:带边权并查集&拓展域

一、前言 作为家喻户晓的并查集,运用简单的几行代码就实现了多个数据间从属关系的高效维护和查找。...每个问题中,小B指定两个数 l 和 r,小A回答 S[l~r] 中有奇数个1还是偶数个1。 机智的小B发现小A有可能在撒谎。...下面记L-1为x,R为y,继续推导(以x和y同类为例,即even): – 如果x和y已经属于一个集合则无需合并,若d[x]和d[y]不同(即dx^dy=1),表示两者其中一个与父节点同类,另外一个与父节点不同类...,而两者的父亲相同,两者不同类,这和“x和y同类”前提矛盾,若dx^dy=0无矛盾。...,表示同一列上,第i号战舰与第j号战舰之间布置的战舰数目,如果第i号战舰与第j号战舰当前不在同一列上输出-1。

1.1K20

SQL 性能优化 总结

)通常将提高查询的效率.子查询中,NOT IN子句将执行一个内部的排序和合并....如果至少有一个列不为空,记录存在于索引中.举例:如果唯一性索引建立表的A 列和B 列上,并且表中存在一条记录的A,B 值为(123,null) , ORACLE将不接受下一条具有相同 A,B 值(123...DEPT_CODEIS NOT NULL; 高效: (索引有效) SELECT… FROM DEPARTMENT WHERE DEPT_CODE>=0; (27)总是使用索引的第一个列: 如果索引是建立多个列上...(28) 用UNION-ALL替换UNION ( 如果有可能的话): 当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL 的方式被 合并, 然后输出最终结果前进行排序...(32) a.如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高. b.特定情况下, 使用索引也许会比全表扫描慢, 这是同一个数量级上的区别.而通常情况下,使用索引比全表扫描要块几倍乃至几千倍

1.8K20

数据科学 IPython 笔记本 7.1 Pandas

Data Analysis) 序列(Series) 数据(DataFrame) 重索引 删除条目 索引,选择和过滤 算术和数据对齐 函数应用和映射 排序和排名 带有重复值的轴索引 汇总和计算描述性统计量...Name: foobarbazqux, dtype: float64 ''' 数据(DataFrame) DataFrame是表格数据结构,包含列的有序集合。...MD 4.0 6.0 4 2015 MD 4.1 6.1 从字典的嵌套字典创建DataFrame(如果没有指定显示索引,内部字典中的键,被合并并排序来形成结果中的索引): pop = {'VA' :...的列上匹配Series的索引,向下广播行并合并不匹配的索引: ser_9 = Series(range(3), index=['a', 'd', 'e']) ser_9 ''' a 0 d...NaN -0.907776 NaN 2 -0.111226 NaN NaN -0.603347 NaN 使用算术方法,列上广播并匹配行(axis = 0): df_10 a b c d 0 0.548814

5.1K20

如何在后台执行 SwiftData 操作

前言SwiftData 是一个用于处理数据操作的框架,特别是 Swift 语言中进行并发操作。本文介绍了如何在后台执行 SwiftData 操作以及与 Core Data 进行比较。... Core Data 中,可以使用私有后台队列上下文来执行长时间运行的任务,以避免阻塞主队列。...Core Data 私有队列上下文使用 Core Data 时,使用主队列上的视图上下文执行 UI 操作。为了避免阻塞主队列,可以使用私有后台队列上下文执行长时间运行的任务,如解析和导入数据。...Country { ... }总结在操作数据模型时,需要注意不要在不同的 actors 之间传递管理的对象。取而代之的是,可以使用 NSManagedObjectID 来不同的线程之间传递对象。...然而,SwiftData 框架的优势在于利用了 Swift 的现代并发特性,为数据操作提供了更强大的支持,使开发人员能够处理数据时更加灵活和高效。

6700

《Python for Excel》读书笔记连载11:使用pandas进行数据分析之组合数据

数据框架的组合和合并可以通过多种方式进行,本节只介绍使用concat、join和merge的最常见情况。虽然它们有重叠,每个功能使特定任务非常简单。...,从而自动匹配列名,即使它们两个数据框架中的顺序不同。...如果要沿列将两个数据框架粘合在一起,设置axis=1: concat的特殊和非常有用的特性是它接受两个以上的数据框架。...左联接(leftjoin)获取左数据框架df1中的所有行,并在索引上匹配右数据框架df2中的行,df2没有匹配行的地方,pandas将填充NaN。左联接对应于Excel中的VLOOKUP情况。...表5-5.联接类型 让我们看看它们在实践中是如何运作的,将图5-3中的示例付诸实践: 如果要在一个或多个数据框架列上联接而不是依赖索引,那么使用“合并”(merge)而不是“联接”(join)。

2.5K20

Java并发机制的底层实现原理--Java并发编程的艺术

书中解释: 为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部 缓存(L1,L2或其他)后再进行操作,操作完不知道何时会写到内存。...从JVM规范中可以看到SynchonizedJVM里的实现原理,JVM基于进入和退出Monitor对 象来实现方法同步和代码块同步,两者的实现细节不一样。...,因为设置的 循环结束时间为while (true) 因此 理论上达到,两者一直工作, // 生产者 生产产品到10后停止, 等待消费者去消费,当产品为0后 ,消费者唤醒线程因为只有两个线程,抛去主线程...如果对象是数组类型,虚拟机用3个字宽 (Word)存储对象头,如果对象是非数组类型,则用2字宽存储对象头。32位虚拟机中,1字宽 等于4字节,即32bit。...如果测试失败,则需 要再测试一下Mark Word中偏向锁的标识是否设置成1(表示当前是偏向锁):如果没有设置, 使用CAS竞争锁;如果设置了,尝试使用CAS将对象头的偏向锁指向当前线程。

50600

Oracle SQL性能优化

如果至少有一个列不为空,记录存在于索引中.举例: 如果唯一性索引建立表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123...DEPT_CODE IS NOT NULL; 高效: (索引有效) SELECT … FROM  DEPARTMENT  WHERE  DEPT_CODE >=0; (27) 总是使用索引的第一个列: 如果索引是建立多个列上...,这两个结果集合会以UNION-ALL的方式被合并, 然后输出最终结果前进行排序....如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高. b. 特定情况下, 使用索引也许会比全表扫描慢, 这是同一个数量级上的区别....BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果第二个明显就快了许多.

2.8K70

Java SQL语句优化经验

,按理说应该速度是最快的,where也应该比having快点的,因为它过滤数据后才进行sum,两个表联接时才用on的,所以一个表的时候,就剩下where跟having比较了。...如果至少有一个列不为空,记录存在于索引中.举例: 如果唯一性索引建立表的A列和B列上, 并且表中存在一条记录的A,B值为(123,null) , ORACLE将不接受下一条具有相同A,B值(123,...WHERE DEPT_CODE IS NOT NULL; 高效: (索引有效) SELECT … FROM DEPARTMENT WHERE DEPT_CODE >=0; (27) 总是使用索引的第一个列: 如果索引是建立多个列上...当SQL 语句需要UNION两个查询结果集合时,这两个结果集合会以UNION-ALL的方式被合并, 然后输出最终结果前进行排序....如果检索数据量超过30%的表中记录数.使用索引将没有显著的效率提高. b. 特定情况下, 使用索引也许会比全表扫描慢, 这是同一个数量级上的区别.

2.6K100

SQL优化法则小记

如果至少有一个列不为空,记录存在于索引中.举例: 如 果唯一性索引建立表的A列和B列上, 并且表中存在一条记录的 A,B 值为 (123,null) , oracle将不接受下一条具有相同 A,B...dept_code is not null; 高效: (索引有效) select … from department where dept_code >=0; 27.总是使用索引的第一个列: 如果索引是建立多个列上...,这两个结果集合会以 union-all的方 式被合并, 然后输出最终结果前进行排序....如果检索数据量超过 30%的表中记录数.使用索引将没有显著的效率提高. b. 特定情况下, 使用索引也许会比全表扫描慢, 这是同一个数量级上的区别....by 语句的效率, 可以通过将不需要的记录在group by 之前过滤掉.下 面两个查询返回相同结果第二个明显就快了许多.

2K90
领券