如何编写按自定义时间区间统计照片最大值并输出DataFrame的函数
Pandas函数max_photos实现方案
前置依赖
需要提前导入pandas库:
import pandas as pd
函数代码
def max_photos(df, start, integer): # 计算需要生成的区间范围,确保覆盖数据中所有晚于start的年份 max_data_year = df['Year'].max() intervals = [] current_start = start # 生成所有连续区间 while True: current_end = current_start + integer - 1 intervals.append((current_start, current_end)) if current_end >= max_data_year: break current_start = current_end + 1 # 遍历每个区间统计结果 res_list = [] for s, e in intervals: timeframe = f"{s}-{e}" # 筛选当前区间内的记录 interval_data = df[(df['Year'] >= s) & (df['Year'] <= e)] if interval_data.empty: res_list.append({ "Timeframe": timeframe, "Max_Year": None, "Max_Num_Photos": None }) continue # 取照片数最大值对应的行 max_idx = interval_data['Number_of_photos'].idxmax() max_row = interval_data.loc[max_idx] res_list.append({ "Timeframe": timeframe, "Max_Year": int(max_row['Year']), "Max_Num_Photos": int(max_row['Number_of_photos']) }) return pd.DataFrame(res_list)
测试验证
你可以用以下代码构造测试数据验证效果:
# 构造题目给出的memories DataFrame memories = pd.DataFrame({ 'Year': [1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2015], 'Number_of_photos': [27,21,39,22,10,12,22,22,40,27,18,20,18,14,33,10,24,17] }) # 测试入参start=1998,integer=4 result = max_photos(memories, 1998, 4) print(result)
输出结果和题目给出的示例完全一致。
内容的提问来源于stack exchange,提问作者BeginnersLuck
相关产品推荐
相关产品推荐

