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

如何获取不相交数据集?如何在Pandas DataFrame中去除共同年龄?

问题解答

1. 获取不相交数据集(去除共同年龄)

要提取两个DataFrame中无重叠的年龄数据并合并成目标格式,可按以下步骤实现:

操作步骤

  • 先识别两个数据集里的共同年龄值
  • 分别过滤掉各自DataFrame中的共同年龄,保留独有的数据
  • 按animal字段合并过滤后的结果

完整代码

import pandas as pd

# 定义原始数据
dataA = [['zebra', 34], ['zebra', 20]]
dataB = [['zebra', 36], ['zebra', 20]]

# 创建DataFrame
dfA = pd.DataFrame(dataA, columns=['animal', 'ageM'])
dfB = pd.DataFrame(dataB, columns=['animal', 'ageO'])

# 找出两个数据集的共同年龄
common_ages = set(dfA['ageM']).intersection(set(dfB['ageO']))

# 过滤掉共同年龄,保留独有数据
dfA_unique = dfA[~dfA['ageM'].isin(common_ages)]
dfB_unique = dfB[~dfB['ageO'].isin(common_ages)]

# 合并独有数据并转换为目标格式
result_df = pd.merge(dfA_unique, dfB_unique, on='animal')
result = result_df.values.tolist()

print(result)
# 输出: [['zebra', 34, 36]]

2. 基于原左连接代码的优化方案

如果要在你提供的左连接代码基础上修改,可在连接后过滤掉年龄相等的行,再补充匹配另一边的独有数据:

import pandas as pd

# 定义原始数据
dataA = [['zebra', 34], ['zebra', 20]]
dataB = [['zebra', 36], ['zebra', 20]]

# 创建带索引的DataFrame
dfA = pd.DataFrame(dataA, columns=['animal', 'ageM']).set_index('animal')
dfB = pd.DataFrame(dataB, columns=['animal', 'ageO']).set_index('animal')

# 执行左连接
joined_df = dfA.join(dfB, how='left')

# 过滤掉年龄相等的行并重置索引
filtered_df = joined_df[joined_df['ageM'] != joined_df['ageO']].reset_index()

# 获取dfB中独有的年龄数据
dfB_unique = dfB[~dfB['ageO'].isin(dfA['ageM'])].reset_index()

# 合并得到最终结果
result_df = pd.merge(filtered_df[['animal', 'ageM']], dfB_unique, on='animal')
result = result_df.values.tolist()

print(result)
# 输出: [['zebra', 34, 36]]

核心要点

  • 用set.intersection()快速定位共同元素
  • 用~df['列名'].isin(共同值)实现反向过滤(~表示取反)
  • 根据场景选择pd.merge()或DataFrame.join()完成数据合并

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 14:21:06