
本文旨在介绍如何使用 Pandas 库高效地对 DataFrame 进行分组聚合,并计算特定指标的百分比利用率。通过 groupby() 和 transform() 方法,避免使用低效的 apply() 函数,实现更快速、简洁的数据处理。我们将以计算设备带宽利用率为例,演示具体操作步骤和代码示例。
使用 Pandas 进行高效分组聚合和百分比计算
Pandas 提供了强大的数据处理功能,其中分组聚合是数据分析中常用的操作。当需要计算每个分组内的特定指标的百分比时,可以使用 groupby() 和 transform() 方法高效地实现。本文将详细介绍如何使用这些方法,并避免使用效率较低的 apply() 函数。
数据准备
首先,我们需要创建一个 Pandas DataFrame 作为示例数据。以下代码创建了一个包含设备名称、接口信息、输入输出流量和带宽使用情况的 DataFrame:
import pandas as pddata = {'Device': ['Usa123', 'Usa123', 'Emea01', 'Emea01'], 'int': ['Eth1', 'Eth0', 'Wan1', 'Eth3'], 'In': [1000, 10000, 1000, 2000], 'Out': [500, 700, 500, 1000], 'Bw_in': [100, 200, 150, 200], 'Bw_out': [75, 80, 90, 70]}df = pd.DataFrame(data)print(df)
输出:
Device int In Out Bw_in Bw_out0 Usa123 Eth1 1000 500 100 751 Usa123 Eth0 10000 700 200 802 Emea01 Wan1 1000 500 150 903 Emea01 Eth3 2000 1000 200 70
计算分组百分比利用率
我们的目标是计算每个设备的输入和输出带宽利用率,即 Bw_in / In 和 Bw_out / Out 的总和,并将其添加到 DataFrame 中。可以使用以下代码实现:
g = df.groupby("Device")df[["%InUsage", "%OutUsage"]] = ( g[["Bw_in", "Bw_out"]].transform("sum") / g[["In", "Out"]].transform("sum").to_numpy())print(df)
输出:
Device int In Out Bw_in Bw_out %InUsage %OutUsage0 Usa123 Eth1 1000 500 100 75 0.027273 0.1291671 Usa123 Eth0 10000 700 200 80 0.027273 0.1291672 Emea01 Wan1 1000 500 150 90 0.116667 0.1066673 Emea01 Eth3 2000 1000 200 70 0.116667 0.106667
代码解释:
df.groupby(“Device”): 按照 “Device” 列进行分组,创建一个 DataFrameGroupBy 对象。g[[“Bw_in”, “Bw_out”]].transform(“sum”): 对每个分组内的 “Bw_in” 和 “Bw_out” 列分别求和。transform(“sum”) 方法会将求和结果广播到每个分组内的每一行,保持 DataFrame 的原始形状。g[[“In”, “Out”]].transform(“sum”): 类似地,对每个分组内的 “In” 和 “Out” 列分别求和,并将结果广播到每一行。.to_numpy(): 将 g[[“In”, “Out”]].transform(“sum”) 转换为 NumPy 数组,以便进行广播除法。/: 将带宽使用总和除以总流量,计算百分比利用率。df[[“%InUsage”, “%OutUsage”]] = …: 将计算结果赋值给 DataFrame 的新列 “%InUsage” 和 “%OutUsage”。
避免使用 apply()
虽然可以使用 apply() 函数实现相同的功能,但 transform() 方法通常更高效,因为它利用了 Pandas 的内部优化。apply() 函数通常在循环中逐行或逐列应用函数,而 transform() 方法可以对整个分组进行批量操作。
以下是使用 apply() 的示例代码(不推荐):
# 不推荐使用def calculate_usage(x): in_usage = x['Bw_in'].sum() / x['In'].sum() out_usage = x['Bw_out'].sum() / x['Out'].sum() return pd.Series({'%InUsage': in_usage, '%OutUsage': out_usage})df[['%InUsage', '%OutUsage']] = df.groupby('Device').apply(calculate_usage)
总结
本文介绍了如何使用 Pandas 库高效地进行分组聚合,并计算特定指标的百分比利用率。通过 groupby() 和 transform() 方法,可以避免使用低效的 apply() 函数,实现更快速、简洁的数据处理。 transform() 方法的优势在于它可以将聚合结果广播到每个分组内的每一行,从而避免了显式循环,提高了代码效率。 在处理大型数据集时,这种优化尤为重要。
以上就是高效 Pandas 数据聚合:计算分组百分比利用率的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1370106.html
微信扫一扫
支付宝扫一扫