当前位置: 首页 > 面试题库 >

Python-pandas与groupby占总数的百分比

陈松
2023-03-14
问题内容

这显然很简单,但是作为一个笨拙的新手,我陷入了困境。

我有一个包含3列的CSV文件,分别是该办公室的州,办公室ID和销售。

我想计算给定状态下每个办公室的销售百分比(每个州的所有百分比的总和为100%)。

df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
                   'office_id': range(1, 7) * 2,
                   'sales': [np.random.randint(100000, 999999)
                             for _ in range(12)]})

df.groupby(['state', 'office_id']).agg({'sales': 'sum'})

返回:

                  sales
state office_id        
AZ    2          839507
      4          373917
      6          347225
CA    1          798585
      3          890850
      5          454423
CO    1          819975
      3          202969
      5          614011
WA    2          163942
      4          369858
      6          959285

我似乎无法弄清楚如何“高达”的state水平groupby与总起来sales对整个state计算分数。


问题答案:

你将不得不创建第二个groupby对象,但是你可以以一种更简单的方式来计算百分比-仅groupby计算state_office并将该sales列除以其和即可。复制Paul H答案的开头:

# From Paul H
import numpy as np
import pandas as pd
np.random.seed(0)
df = pd.DataFrame({'state': ['CA', 'WA', 'CO', 'AZ'] * 3,
                   'office_id': list(range(1, 7)) * 2,
                   'sales': [np.random.randint(100000, 999999)
                             for _ in range(12)]})
state_office = df.groupby(['state', 'office_id']).agg({'sales': 'sum'})
# Change: groupby state_office and divide by sum
state_pcts = state_office.groupby(level=0).apply(lambda x:
                                                 100 * x / float(x.sum()))

返回值:

                     sales
state office_id           
AZ    2          16.981365
      4          19.250033
      6          63.768601
CA    1          19.331879
      3          33.858747
      5          46.809373
CO    1          36.851857
      3          19.874290
      5          43.273852
WA    2          34.707233
      4          35.511259
      6          29.781508


 类似资料:
  • 这显然很简单,但作为一个新手,我被卡住了。 我有一个CSV文件,其中包含3列:州、办公室ID和该办公室的销售额。 我想计算给定州每个办公室的销售额百分比(每个州所有百分比的总和为100%)。 这返回: 我似乎不知道如何“达到”级别,以总计整个的来计算分数。

  • 问题内容: 我有一个MSSQL表存储,该存储在表中具有以下列: 有人可以帮我进行SQL查询,以产生占雇员总数(NumEmployees)30%的顶级商店(storeID)吗? 问题答案: WITH cte AS (SELECT storeid, numemployees, ( numemployees * 100 ) / SUM(numemployees) OVER (PARTITION BY 1

  • 我正在将每30秒的成功计数指标和失败计数指标记录到石墨中。在Grafana中,我使用每秒钟和hitCount(1分钟)来聚合每分钟的计数(成功和失败)。现在我需要计算每分钟的成功百分比?关于如何继续的任何建议? 此外,我还在下面提到的第四个指标*上使用groupbyNode。

  • 主要内容:创建DataFrame对象,创建groupby分组对象,查看分组结果,遍历分组数据,应用聚合函数,组的转换操作,组的数据过滤操作在数据分析中,经常会遇到这样的情况:根据某一列(或多列)标签把数据划分为不同的组别,然后再对其进行数据分析。比如,某网站对注册用户的性别或者年龄等进行分组,从而研究出网站用户的画像(特点)。在 Pandas 中,要完成数据的分组操作,需要使用 groupby() 函数,它和 SQL 的 操作非常相似。  在划分出来的组(group)上应用一些统计函数,从而达到

  • 问题内容: 我正在使用此数据框: 我想按名称然后按水果进行汇总,以获得每个名称的水果总数。 我尝试按名称和水果分组,但如何获取水果总数。 问题答案: 使用方法

  • 问题内容: 我有这些结果: 与表类似: 这些按人分组。现在,我希望添加一列,其中包含根据每个人的总和计算得出的每个人的百分比。 例如:总和为300,因此我需要这样的结果: 我在网上查看了代码,并提出了这样的解决方案: 但是我不确定如何将交叉联接以及已经存在的分组/求和部分合并到联接中。或者这是否完全正确。 任何帮助将不胜感激- SQL小提琴http://sqlfiddle.com/#!9/80f9