如何获取不相交数据集?如何在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
相关产品推荐
相关产品推荐

