gpt4 book ai didi

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

转载 作者:我是一只小鸟 更新时间:2023-08-19 21:56:54 26 4
gpt4 key购买 nike

这次介绍的小技巧不是统计,而是把统计结果作为 新列 和原来的数据放在一起。 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

                        
                      

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

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

                        
                      

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

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

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

                        
                      

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

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

                        
                      

image.png

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

最后此篇关于【pandas小技巧】--统计值作为新列的文章就讲到这里了,如果你想了解更多关于【pandas小技巧】--统计值作为新列的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com