计算电影投资回收期时遇'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.
相关产品推荐
相关产品推荐

