如何基于timeframe_change<0的条件计算timeframe_L列的分组均值?
解决方案
要实现按Code分组,计算timeframe_change < 0时timeframe_L列的均值,你需要在聚合逻辑中引用整个分组的行数据,而非单独的timeframe_change列。以下是两种实用方法:
方法一:在agg中用lambda处理整个分组
直接修改agg里的lambda函数,让它接收完整的分组对象,筛选出timeframe_change < 0的行后,再取timeframe_L的均值:
df = test.groupby(['Code']).agg( Count=('timeframe_change', 'count'), # 保留原有的总计数 Down_Mean_L=(lambda group: group[group['timeframe_change'] < 0]['timeframe_L'].mean()) )
这种方式会保留所有Code分组,没有符合条件的分组,Down_Mean_L会显示NaN。
方法二:先筛选再分组(更直观)
先筛选出timeframe_change < 0的行,再对筛选结果分组计算均值。如果需要保留所有Code的总计数,可以和原分组的计数合并:
# 1. 计算所有Code的总计数 total_count = test.groupby(['Code'])['timeframe_change'].count().rename('Count') # 2. 筛选符合条件的行,计算timeframe_L的均值 filtered_mean = test[test['timeframe_change'] < 0].groupby(['Code'])['timeframe_L'].mean().rename('Down_Mean_L') # 3. 合并结果,保留所有Code df = total_count.to_frame().merge(filtered_mean, left_index=True, right_index=True, how='left')
内容的提问来源于stack exchange,提问作者jrcart
相关产品推荐
相关产品推荐

