You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas确定2022年2月1日最高利用率地点的实现方案

找出2022年2月1日利用率最高的地点

需求说明

筛选2022年2月1日的数据,按地点分组计算利用率(已使用标记数总和/总标记数总和×100),找出利用率最高的地点。

原始数据

ID  location    total   marks_free  marks_utilized  date
1   NY          6       5           1               2/1/2022
2   NY          10      5           5               2/1/2022
3   NY          2       1           1               2/1/2022
4   CA          5       4           1               2/1/2022
5   CA          6       5           1               2/1/2022
6   CA          10      10          0               2/1/2022
7   NY          6       6           0               3/1/2022
8   NY          10      10          0               3/1/2022
9   NY          2       1           1               3/1/2022
10  CA          5       4           1               3/1/2022
11  CA          6       5           1               3/1/2022
12  CA          10      10          0               3/1/2022                    

期望结果

location    marks_utilized  date        
NY          38%             2/1/2022        

计算逻辑

  1. 筛选出date为2/1/2022的记录
  2. 按location分组,计算每组的sum(marks_utilized)和sum(total)
  3. 利用率公式:sum(marks_utilized)/sum(total)×100,结果取整并添加百分号(如NY的(1+5+1)/(6+10+2)×100≈38%)
  4. 提取利用率最高的地点记录

当前尝试代码问题

现有代码存在两处错误:

  • 未先筛选目标日期数据,会包含其他日期的无效记录
  • 计算利用率时引用原DataFramedf而非分组后的df1,导致计算逻辑错误
# filter to 2/1/2022
df1 = df.groupby(['location', 'date']).agg({'marks_utilized': 'sum', 'total': 'sum'})
df1['marks_utilized'] = df['marks_utilized'] / df['total'] * 100

修正后的解决方案

完整代码

# 筛选2022年2月1日的数据
filtered_df = df[df['date'] == '2/1/2022']

# 按location和date分组,计算聚合值
grouped_df = filtered_df.groupby(['location', 'date']).agg(
    total_utilized=('marks_utilized', 'sum'),
    total_marks=('total', 'sum')
).reset_index()

# 计算利用率并格式化为带百分号的字符串
grouped_df['marks_utilized'] = (grouped_df['total_utilized'] / grouped_df['total_marks'] * 100).round(0).astype(int).astype(str) + '%'

# 保留目标列并筛选最高利用率记录
result = grouped_df[['location', 'marks_utilized', 'date']]
max_result = result.loc[result['marks_utilized'].str.replace('%', '').astype(int).idxmax()]

# 输出结果
print(max_result)

运行结果

location          NY
marks_utilized    38%
date         2/1/2022
Name: 1, dtype: object

若需DataFrame格式输出,可替换最后打印语句为:

print(result.loc[[result['marks_utilized'].str.replace('%', '').astype(int).idxmax()]])

输出:

location marks_utilized      date
1       NY            38%  2/1/2022

内容的提问来源于stack exchange,提问作者Lynn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:45:39