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

计算电影投资回收期时遇'int' object is not subscriptable错误求助

解决投资回收期计算中的'int' object is not subscriptable错误

首先直接点出问题根源:你代码里的grouped是从range(0, 5285+1)中取出的整数,并非你预期的分组票房数据对象,所以执行grouped['Gross']时,相当于给整数用下标访问,自然会抛出'int' object is not subscriptable的错误。同时你的代码逻辑也没贴合需求公式——既没关联预算数据,也没计算累积票房。

下面是基于Pandas的完整解决方案,完全匹配你要实现的投资回收期计算逻辑:

1. 合并两个数据集

你有两张表:每日票房表(记为daily_gross)和电影预算表(记为movie_budgets),首先通过共同标识(比如mid列)将预算数据关联到每日票房记录中:

import pandas as pd

# 假设两张表的关联键是mid,若实际是movie列可替换为对应字段
merged_df = pd.merge(daily_gross, movie_budgets, on='mid')

2. 按电影分组计算累积票房

先按电影ID和上映天数排序,确保票房按时间顺序累加,再计算每部电影的每日累计总收入:

# 按电影ID和上映天数排序,保证累加顺序正确
merged_df = merged_df.sort_values(['mid', 'Days'])
# 分组计算每部电影的累计票房
merged_df['cumulative_gross'] = merged_df.groupby('mid')['Gross'].cumsum()

3. 计算每部电影的投资回收期

对每个电影分组,筛选出累计票房≥制作预算的第一条记录,对应的天数就是投资回收期:

# 筛选累计票房达标记录
break_even_mask = merged_df['cumulative_gross'] >= merged_df['Production Budget']
# 取每个电影第一个达标的天数
break_even_days = merged_df[break_even_mask].groupby('mid')['Days'].min()

# 整理成带电影信息的结果表
result = break_even_days.reset_index(name='Break_Even_Days')
result = pd.merge(result, movie_budgets[['mid', 'movie_title', 'Production Budget']], on='mid')

逻辑验证

这个流程完全贴合你给出的公式:对每部电影的票房序列gm,找到最小的i(对应Days),使得从第0天到第i天的累计票房≥制作预算。比如《Avatar》(预算4.25亿)会计算每日累计票房,找到第一个超过4.25亿的天数,即为它的投资回收期。

内容的提问来源于stack exchange,提问作者T.v.L.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:17:27