新手向 您所在的位置:网站首页 transfer和transform和transport 新手向

新手向

2023-04-25 15:29| 来源: 网络整理| 查看: 265

Understanding the Transform Function in Pandas

Pandas具有丰富的功能让我们探索,transform就是其中之一,利用它可以高效地汇总数据。 Python Data Science Handbook 是一个关于pandas的优秀资源。 在该书的描述中,transform是与groupby(pandas中最有用的操作之一)组合使用的。一般情况下,我们在groupby之后使用aggregate , filter 或 apply来汇总数据,transform可能稍难理解。 该书对应的github资源 jupyter notebooks里的内容可能对理解transform的独特作用有所帮助。

aggregation会返回数据的缩减版本,而transformation能返回完整数据的某一变换版本供我们重组。这样的transformation,输出的形状和输入一致。一个常见的例子是通过减去分组平均值来居中数据。

接下来,我们利用简单的11行销售数据实际做一个其它用途的例子来掌握transform。 实践 加载数据 import pandas as pd df = pd.read_excel("sales_transactions.xlsx") 查看数据 可以看到数据包含了不同的订单(order),以及订单里的不同商品的数量(quantity)、单价(unit price)和总价(ext price) 现在我们的任务是为数据表添加一列,表示不同商品在所在订单的价钱占比。 首先我们要获得每个订单的总花费。groupby可以实现。 df.groupby('order')["ext price"].sum() order 10001 576.12 10005 8185.49 10006 3724.49 Name: ext price, dtype: float64 这些新得到的数据如何与原始数据帧结合呢? order_total = df.groupby('order')["ext price"].sum().rename("Order_Total").reset_index() df_1 = df.merge(order_total) df_1["Percent_of_Order"] = df_1["ext price"] / df_1["Order_Total"] 我们实现了目标(还多加了一列订单总额),但是步骤比较多,有没有更好的办法呢?——主角出场:) Transform 我们先试下 df.groupby('order')["ext price"].transform('sum') 0 576.12 1 576.12 2 576.12 3 8185.49 4 8185.49 5 8185.49 6 8185.49 7 8185.49 8 3724.49 9 3724.49 10 3724.49 11 3724.49 dtype: float64 不再是只显示3个订单的对应项,而是保持了与原始数据集相同数量的项目,这样就很好继续了。这就是transform的独特之处。 df["Order_Total"] = df.groupby('order')["ext price"].transform('sum') df["Percent_of_Order"] = df["ext price"] / df["Order_Total"] 甚至可以一步: df["Percent_of_Order"] = df["ext price"] / df.groupby('order')["ext price"].transform('sum')


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有