
本文旨在解决pandas dataframe中将多行数据聚合为单行时,如何同时保留并结构化展示每行特有的详细属性(如不同技术人员的活动及其时间)的挑战。通过利用`groupby().apply()`结合自定义聚合函数,我们能够将组内数据动态转换为指定列,从而在不丢失关键信息的前提下,实现高度定制化的数据扁平化处理,适用于需要将多维度细节整合到单一记录的场景。
在数据分析和处理中,我们经常会遇到需要将DataFrame中的多行记录聚合为单行的情况。然而,当这些多行记录包含需要被单独识别和展示的独特属性时,例如一个工作任务(Job #)可能由多名技术人员(Name)完成,每名技术人员又有多项活动(Timesheet Activity)和对应的活动日期(Timesheet Activity Date),简单的聚合操作(如mean(), sum(), first())往往会导致信息的丢失或混淆。本教程将深入探讨如何使用Pandas的groupby().apply()方法,结合自定义聚合函数,实现这种复杂的数据扁平化需求,确保所有关键信息都能以结构化、易于理解的方式呈现在最终的单行记录中。
挑战与目标
假设我们有一个包含工作任务详情的DataFrame,其中每个工作任务(Job #)可能有多条记录,代表不同技术人员的不同活动。原始数据示例如下:
512356618.0Carlos MezaDriving5779854.02023-10-26…2023-10-24, 2023-10-250.9512456618.0Carlos MezaWorking5779854.02023-10-26…2023-10-24, 2023-10-2514.33512556618.0Donald PearsonDriving5779854.02023-10-26…2023-10-24, 2023-10-261.2………………………
我们的目标是将每个Job #的所有相关信息聚合到一行中,同时为每个技术人员及其各项活动(如驾驶、工作)创建独立的列,以保留其独特的活动日期和持续时间。期望的输出结构示例如下:
5779854.02023-10-2656618.0Donald Pearson, Carlos Meza, Joshua WilliamsCarlos Meza50.88333333Carlos Meza2023-10-24, 2023-10-25Driving0.92023-10-24, 2023-10-25Working14.33333333Donald Pearson…
解决方案核心:groupby().apply()
Pandas的groupby().apply()方法是解决此类复杂聚合问题的强大工具。当标准的聚合函数无法满足需求时,apply()允许我们对每个分组应用一个自定义函数。这个自定义函数可以执行任意复杂的操作,包括遍历组内的行、创建新的列、甚至返回一个全新的Series或DataFrame,从而实现高度灵活的数据转换。
在这种情况下,我们将为每个Job #组定义一个函数。该函数将遍历组内的所有技术人员,并为每个技术人员的每种活动类型动态创建一组新的列来存储其详细信息。
实现自定义聚合函数
为了实现上述目标,我们需要创建一个自定义函数,它接收一个DataFrame组作为输入,并返回一个包含所有聚合信息的Series。
首先,我们准备一个示例DataFrame:
import pandas as pdfrom io import StringIO# 示例数据data = """index,Job #,Name,Timesheet Activity,Customer ID,Invoice Date,Completion Date,Invoice #,Assigned Technicians,Primary Technician,Business Unit,Prevailing Wage,Booked By,Job Number,Timesheet Activity Date,Duration (Decimal)5123
以上就是Pandas DataFrame行聚合:保留独特属性并生成结构化输出的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1377617.html
微信扫一扫
支付宝扫一扫


