如何批量为59个参与者DataFrame添加AcuteLegs_3days列?
批量为多个DataFrame添加目标列的解决方案
报错原因
你定义的participants列表里存储的是DataFrame的名称字符串(比如'df_participant1'),而非DataFrame对象本身。循环时df是字符串类型,用df['AcuteLegs_1day']会触发字符串索引必须为整数的错误——字符串只能用数字索引位置,不能用列名。
解决方法
方法1:直接存储DataFrame对象到列表
将participants列表改为存储实际的DataFrame对象,而非字符串名称:
# 替换成你实际的DataFrame对象列表 participants = [df_participant1, df_participant2, df_participant3, ...] for df in participants: # 合并两步操作,更简洁 df['AcuteLegs_3days'] = df["AcuteLegs_1day"].rolling(3).sum().shift(1)
方法2:通过变量名动态获取DataFrame对象
如果必须保留字符串列表(比如从外部读取变量名),可以用globals()或locals()获取全局/局部命名空间中的DataFrame对象:
participants = ['df_participant1', 'df_participant2', ...] for df_name in participants: # 从全局命名空间中获取对应DataFrame df = globals()[df_name] df['AcuteLegs_3days'] = df["AcuteLegs_1day"].rolling(3).sum().shift(1)
方法3:用字典统一管理DataFrame(推荐)
更规范的做法是把所有参与者的DataFrame放到字典中,键为参与者标识,值为对应DataFrame,后续管理和批量操作更便捷:
# 初始化字典,存储所有参与者DataFrame participant_dfs = { 'participant1': df_participant1, 'participant2': df_participant2, # ... 其他57个DataFrame } # 循环处理字典中的每个DataFrame for df in participant_dfs.values(): df['AcuteLegs_3days'] = df["AcuteLegs_1day"].rolling(3).sum().shift(1)
内容的提问来源于stack exchange,提问作者E Jager de
相关产品推荐
相关产品推荐

