首页 > 其他分享 >【pandas小技巧】--统计值作为新列

【pandas小技巧】--统计值作为新列

时间:2023-08-18 10:23:34浏览次数:31  
标签:新列 订单 -- sum df pandas 统计

这次介绍的小技巧不是统计,而是把统计结果作为新列和原来的数据放在一起。
pandas的各种统计功能之前已经介绍了不少,但是每次都是统计结果归统计结果,原始数据归原始数据,
没有把它们合并在一个数据集中来观察。

下面通过两个场景示例来演示如果把统计值作为新列的数据。

1. 成绩统计的场景

成绩统计及其类似的场景比较常见,也就是把每行统计的结果作为该行的一个新列。
比如:

import pandas as pd
import numpy as np

df = pd.DataFrame(
    np.random.randint(60, 100, (4, 3))
)
df.columns = ["语文", "数学", "英语"]
df.index = ["学生"+s for s in list("ABCD")]
df

image.png

统计每个学生的各科总分和平均分,然后作为新的列合并到原数据中。

sum = df.sum(axis=1)
mean = df.mean(axis=1)

df["总分"] = sum
df["平均分"] = mean
df

image.png

这样可以更全面的查看每个学生的学习情况。

2. 订单统计的场景

订单统计的这个示例稍微复杂点,因为一个订单ID可能包含多个物品,
按订单ID来统计每个订单合计信息时,不能简单的像上面的统计成绩那样直接计算按行统计。

df = pd.DataFrame(
    {
        "id": [1, 1, 2, 3, 3, 3],
        "product": ["苹果", "香蕉", "手机",
                    "冰箱", "电视", "空调"],
        "price": [24, 15, 2000, 8000, 
                  5500, 7800],
    }
)

df

image.png
如上所示,总共有3个订单,根据订单号统计每个订单的总价如下:

df.groupby("id").price.sum()

image.png
得到每个订单ID对应的总价格,但是合计信息只有3行,而原来的数据是6行,无法直接合并到原数据。

这种情况下,我们需要用pandas里的transform函数。
transform函数分组统计之后,会保持原来的行数。

df["总价"] = df.groupby("id").price.transform("sum")
df

image.png
相同的订单ID,统计的总价是一样的。
总价的信息附加在订单的每个具体物品之后,
还可以基于此统计出同一个订单中每个物品价格所占总价的百分比

df["百分比"] = df.price / df["合计"]
df

image.png

总之,统计值作为新的列,不仅可以更好的比较和观察原始数据和统计值,
还可以基于新的统计列,再统计出其他的信息。

标签:新列,订单,--,sum,df,pandas,统计
From: https://www.cnblogs.com/wang_yb/p/17639701.html

相关文章

  • No_55_JumpGame
    ContentYouaregivenanintegerarraynums.Youareinitiallypositionedatthearray'sfirstindex,andeachelementinthearrayrepresentsyourmaximumjumplengthatthatposition.Returntrueifyoucanreachthelastindex,orfalseotherwise.......
  • Redis 过期监听 + 加阻塞队列
    https://redis.io/docs/manual/keyspace-notifications/ 简单一句话就是要订阅key失效事件 应用场景:在线客服中开启会话后,如果客户一段时间未回复,则结束会话。为了保证会话结束的时效性,通过redis订阅key失效事件处理        配置notify-keyspace-eventsE......
  • CLion的远程同步功能,删除文件没有进行同步问题解决
    在使用CLion的deployment功能时。正常修改增加都会自动同步到远程。但是删除文件或者文件夹时,远程的文件没有删除,重新同步后,原来删除的文件又出现了。这是因为Clion默认没有将删除的同步打开:Settings->Deployment->Options->勾选:Deleteremotefileswhenlocalaredele......
  • 文件IO
    目录1.系统IO1.1文件系统1.1.1文件的操作过程1.2Linux系统IO1.2.1open1.2.2read1.2.3write1.2.4close1.2.5lseek1.2.6umask1.2.7获取当前的工作目录1.2.8改变进程当前的工作目录1.2.9文件截短1.2.10删除文件1.2.11文件属性1.3目录1.3.1目录操作2.标准IO2.1标准IO的函数接口......
  • Ubuntu 开机自启动Django程序
    在Ubuntu系统中设置开机启动一个命令,如pythonmanage.pyrunserver0.0.0.0:8000来启动Django服务器,可以通过以下步骤实现:创建一个SystemdService文件:打开终端并使用文本编辑器(例如nano或vim)创建一个SystemdService文件,比如django_app.service:bashCopycodesudona......
  • shell 编程 命令
    #!/bin/shshell编程的头文件echo“$0”返回的是这个脚本的部分路径echo“$1”返回的第一个参数echo“$2”返回的第二个参数echo“$*”返回的是全部参数echo“$#”返回的是参数的个数read-p“请输入你的名字:”usernameecho$usernameread-t60-p"请输入数字:"ab......
  • CodeGeeX中这些隐藏的设置,你知道吗?
    随着CodeGeeX整体性能的升级,越来越多的用户发现CodeGeeX的很多实用功能,能够帮助程序员更快更好的编写代码和解决技术问题。近期,我们看到许多用户在使用CodeGeeX的过程中,有一些相似的疑问。比如,很多人希望能够通过调整设置,让CodeGeeX的生成方式、工作语言更符合自己的习惯。今天的......
  • SimpleDateFormat 线程安全问题修复方案
    问题介绍在日常的开发过程中,我们不可避免地会使用到JDK8之前的Date类,在格式化日期或解析日期时就需要用到SimpleDateFormat类,但由于该类并不是线程安全的,所以我们常发现对该类的不恰当使用会导致日期解析异常,从而影响线上服务可用率。以下是对SimpleDateFormat类不恰当......
  • windows10 登陆FTP成功后总是打开两个窗口
     具体现象:使用windows资源管理器打开登陆FTP,登陆FTP成功后当前窗口显示此文件夹为空,不在当前窗口显示文件夹内容,却在当前窗口后重新打开了一个资源管理器窗口显示FTP文件夹内容 解决方法:在资源管理器中输入地址时加上用户名,比如ftp://[email protected] ......
  • 智能一体化机柜会走多久?
     智能一体化机柜是数据中心行业新兴的一种智能化设备。它将人工智能(AI)与互联网的物联网(IoT)技术有机结合起来,全面提升了运维及监控效率、优化空间资源的管理等,是当前数据中心行业的发展趋势之一。未来,随着数字经济的迅速发展,智能一体化机柜应用的领域将更加广泛,在以下几个方面将展......