You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中遍历DataFrame列表并引用前序计算结果?

解决方案

核心问题是你没保存前序处理后的结果,也没在后续循环中关联前序的r_results值。下面是修改后的完整代码,适配多DataFrame的顺序处理:

import pandas as pd

# 示例数据
df1 = pd.DataFrame({'ID':[1,2,3],
                'r_f':[0.18878187,0.327355797,0.100753051]})
df2 = pd.DataFrame({'ID':[1,2,3,4,5],
                'r_f':[0.300009355,0.331788473,0.146077926,0.167329833,0.245227094]})
df_lst = [df1, df2]

thd_new = 0.3
thd_curr = 0.3333

def buffer_screen(curr, r):
    if curr == 1 and r <= thd_curr:
        return 1
    elif curr == 0 and r <= thd_new:
        return 1
    else:
        return 0

# 存储处理后的DataFrame列表
processed_dfs = []

# 处理第一个DataFrame
first_df = df_lst[0].copy()
first_df['r_results'] = first_df['r_f'].apply(lambda x: 1 if x <= thd_new else 0)
processed_dfs.append(first_df)

# 处理后续的DataFrame
for idx in range(1, len(df_lst)):
    curr_df = df_lst[idx].copy()
    # 获取前一个处理好的DataFrame
    prev_processed = processed_dfs[idx-1]
    # 按ID合并,获取前一个的r_results,新ID默认curr为0
    merged = curr_df.merge(prev_processed[['ID', 'r_results']], on='ID', how='left').fillna({'r_results': 0})
    # 计算当前的r_results
    merged['r_results'] = merged.apply(lambda row: buffer_screen(row['r_results'], row['r_f']), axis=1)
    # 保留当前df的原列+新计算的r_results
    processed_curr = merged[curr_df.columns.tolist() + ['r_results']]
    processed_dfs.append(processed_curr)

# 查看结果
for i, df in enumerate(processed_dfs):
    print(f"处理后的第{i+1}个DataFrame:")
    print(df)
    print("-"*30)

关键说明:

  • 用processed_dfs列表保存每一步处理后的结果,确保后续循环能直接获取前序的r_results
  • 处理后续df时,通过merge按ID关联前序结果,新出现的ID(比如df2里的4、5)因为没有前序记录,填充r_results=0,按新阈值规则处理
  • 每次处理都用copy()避免修改原DataFrame,防止数据污染

内容的提问来源于stack exchange,提问作者Silvia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 05:42:42