如何用Pandas编写函数计算指定时间范围内Test 1列的平均值?
如何实现基于时间范围计算Test 1列平均值的函数?
嘿,我来帮你搞定这个需求!先提个小细节:你代码里的fields列表写的是['Time', 'Time 1', 'Time 2'],但问题里说的是Test 1和Test 2,应该是笔误吧?我下面会按照问题里的Test 1和Test 2来调整,要是实际字段是Time的话你改回去就行~
第一步:确保时间列是可比较的格式
首先得把Time列转换成datetime类型,不然直接用字符串比较时间范围会出问题。如果导入后Time还是字符串格式,执行下面这行代码转换:
df['Time'] = pd.to_datetime(df['Time'])
第二步:编写计算平均值的函数
接下来就可以写核心函数了,我们给它起个直观的名字calculate_test1_avg,接收起始时间和结束时间两个参数:
def calculate_test1_avg(start_time, end_time): # 筛选出Time列在起止时间之间的数据 filtered_data = df[(df['Time'] >= start_time) & (df['Time'] <= end_time)] # 计算Test 1列的平均值,没有数据时会返回NaN,也可以根据需求改成返回0或者提示 return filtered_data['Test 1'].mean()
第三步:调用函数的示例
调用的时候直接传符合格式的时间就行,不管是字符串还是datetime对象都可以:
# 举个例子:计算2024年1月1日到2024年1月10日的Test 1平均值 average = calculate_test1_avg('2024-01-01', '2024-01-10') print(f"指定时间范围内Test 1的平均值是: {average}")
额外小提示
- 如果
Time列有缺失值,可以先执行df = df.dropna(subset=['Time'])去掉这些无效行 - 要是筛选后没有符合条件的数据,函数会返回
NaN,你可以在函数里加个判断优化体验:if filtered_data.empty: print("没有找到指定时间范围内的数据") return 0
内容的提问来源于stack exchange,提问作者Arpit Sharma
相关产品推荐
相关产品推荐

