如何基于多个DataFrame的多筛选条件返回筛选后的合并数据集?
嘿,这需求很清晰,我来一步步帮你实现!我们可以通过Pandas的筛选+合并操作轻松完成这个任务,具体步骤如下:
实现步骤
1. 先确保导入Pandas库
首先得把Pandas导进来,这是处理DataFrame的核心工具:
import pandas as pd
2. 定义你的原始DataFrame(如果还没定义的话)
先把你给出的三个DataFrame写出来,方便后续测试和操作:
# df1 df1 = pd.DataFrame({ 'Ticker': ['ABC', 'DEF', 'GHI'], 'Company Name': ['ABC Co.', 'DEF Co.', 'GHI Co.'], 'COMBOACCRUAL': [0.9, 0.99, 0.5] }) # df2 df2 = pd.DataFrame({ 'Ticker': ['ABC', 'DEF', 'GHI'], 'Company Name': ['ABC Co.', 'DEF Co.', 'GHI Co.'], 'PMAN': [0.7, 0.3, 0.55] }) # df3 df3 = pd.DataFrame({ 'Ticker': ['ABC', 'DEF', 'GHI'], 'Company Name': ['ABC Co.', 'DEF Co.', 'GHI Co.'], 'PFD': [0.25, 0.35, 0.9] })
3. 对每个DataFrame应用筛选条件
按照要求分别过滤每个数据集:
# 筛选df1:只保留COMBOACCRUAL小于0.95的记录 filtered_df1 = df1[df1['COMBOACCRUAL'] < 0.95] # 这里DEF的COMBOACCRUAL是0.99,不满足条件会被排除 # 筛选df2:只保留PMAN小于0.95的记录 filtered_df2 = df2[df2['PMAN'] < 0.95] # 所有记录都满足这个条件 # 筛选df3:只保留PFD小于0.95的记录 filtered_df3 = df3[df3['PFD'] < 0.95] # 所有记录都满足这个条件
4. 合并筛选后的数据集
我们基于Ticker和Company Name这两个唯一标识,用**内连接(inner join)**来合并三个筛选后的DataFrame,这样只会保留在所有筛选后数据集中都存在的公司记录:
# 链式合并,一步到位 df4 = filtered_df1.merge(filtered_df2, on=['Ticker', 'Company Name']) \ .merge(filtered_df3, on=['Ticker', 'Company Name'])
5. 查看最终结果
运行后打印df4,就会得到你预期的结果:
print(df4)
输出:
Ticker Company Name COMBOACCRUAL PMAN PFD 0 ABC ABC Co. 0.9 0.70 0.25 1 GHI GHI Co. 0.5 0.55 0.90
内容的提问来源于stack exchange,提问作者user20311840
相关产品推荐
相关产品推荐

