如何将pandas DataFrame中同一周期内的多个值转换为对应周期权重
Pandas 计算单日得分权重实现方法
import pandas as pd # 1. 转换DateTime字段为pandas日期类型(已转换可跳过) df['DateTime'] = pd.to_datetime(df['DateTime']) # 2. 按日期分组计算权重,一行完成字段新增 df['DailyScoreWeight'] = df['Score'] / df.groupby(df['DateTime'].dt.date)['Score'].transform('sum')
代码说明
df['DateTime'].dt.date:从带时间的日期字段中提取纯日期维度,作为分组的依据,保证同一天的所有记录被分到同一组groupby(...)['Score'].transform('sum'):对分组后的Score列求和,transform方法会把求和结果自动对齐原表的每一行,无需额外做表关联操作,输出结果行数和原表完全一致- 计算逻辑天然规避分母为0的问题:如果当日所有Score都是0,计算结果会是
NaN,你可以根据业务需要后续用fillna(0)把空值替换为0即可
效果验证
比如你举例的Day1有三条记录Score分别为4、3、3,当日总分为10,代码运行后对应的DailyScoreWeight值会自动计算为0.4、0.3、0.3,符合需求。
内容的提问来源于stack exchange,提问作者HaoAreYou
相关产品推荐
相关产品推荐

