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

如何按Stock列匹配合并多份含Stock与TF列的DataFrame

解决多DataFrame匹配Stock并合并TF列的问题

你之前用链式inner merge或reduce做inner merge没得到预期结果,是因为inner merge只会保留所有DataFrame中都存在的Stock,而你需要的是至少在两个DataFrame中出现的Stock,并合并它们对应的TF值。下面是具体实现步骤:

步骤1:给每个DataFrame的TF列添加来源标识

先把每个DataFrame的TF列重命名,带上对应DataFrame的名称,避免合并后列名冲突:

import pandas as pd
from functools import reduce

# 假设你的5个DataFrame是df1到df5,先重命名TF列
df1 = df1.rename(columns={"TF": "TF_df1"})
df2 = df2.rename(columns={"TF": "TF_df2"})
df3 = df3.rename(columns={"TF": "TF_df3"})
df4 = df4.rename(columns={"TF": "TF_df4"})
df5 = df5.rename(columns={"TF": "TF_df5"})

步骤2:Outer Merge合并所有DataFrame

用outer merge把所有DataFrame基于Stock列合并,这样能保留所有出现过的Stock,不存在的TF值会显示为NaN:

# 把所有DataFrame放进列表,用reduce执行outer merge
dfs_list = [df1, df2, df3, df4, df5]
merged_total = reduce(lambda left, right: pd.merge(left, right, on="Stock", how="outer"), dfs_list)

步骤3:过滤出至少存在两个TF值的Stock

计算每行非空TF列的数量,只保留数量≥2的行,就是你需要的匹配Stock:

# 统计每行非空TF列的数量
merged_total["tf_count"] = merged_total.filter(like="TF_").notna().sum(axis=1)
# 过滤并移除统计列
result_df = merged_total[merged_total["tf_count"] >= 2].drop("tf_count", axis=1)

结果说明

最终的result_df中,每个Stock对应的TF列会显示它在对应DataFrame中的值,NaN表示该Stock未在这个DataFrame中出现。比如AKENR会显示TF_df1和TF_df4的值,其他TF列为空,完全符合你的预期需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:41:24