如何找出第一个DataFrame中独有的非None值(与第二个对比)
找出df1中存在但df2中不存在的非None值
问题场景
现有两个包含2列的DataFrame:
df1 df2 AAA BBB AAA KKK BBB CCC BBB LLL CCC FFF CCC FFF DDD None None None
需要找出df1中存在但df2中不存在的非None值,预期结果为DDD。
实现方法
以下是基于Pandas的两种可行方案:
方案一:集合差集法
先提取两个DataFrame的所有非None值并转为集合,再通过集合的差集操作直接得到结果:
import pandas as pd import numpy as np # 构造示例DataFrame df1 = pd.DataFrame({'AAA': ['AAA', 'BBB', 'CCC', 'DDD'], 'BBB': ['BBB', 'CCC', 'FFF', np.nan]}) df2 = pd.DataFrame({'AAA': ['AAA', 'BBB', 'CCC', np.nan], 'KKK': ['KKK', 'LLL', 'FFF', np.nan]}) # 提取非None值并转集合 df1_non_null = set(df1.stack().dropna()) df2_non_null = set(df2.stack().dropna()) # 计算差集并输出 result = df1_non_null - df2_non_null print(list(result)[0]) # 输出: DDD
方案二:isin筛选法
将DataFrame转为一维Series后,用isin判断元素是否存在于df2的非None值中,再筛选出不符合条件的元素:
import pandas as pd import numpy as np # 构造示例DataFrame df1 = pd.DataFrame({'AAA': ['AAA', 'BBB', 'CCC', 'DDD'], 'BBB': ['BBB', 'CCC', 'FFF', np.nan]}) df2 = pd.DataFrame({'AAA': ['AAA', 'BBB', 'CCC', np.nan], 'KKK': ['KKK', 'LLL', 'FFF', np.nan]}) # 提取所有非None值的一维序列 df1_flat = df1.stack().dropna() df2_flat = df2.stack().dropna() # 筛选出不在df2中的元素 unique_values = df1_flat[~df1_flat.isin(df2_flat)].unique() print(unique_values[0]) # 输出: DDD
代码说明
stack():将二维DataFrame转为一维Series,统一处理所有列的元素dropna():过滤掉所有None/NaN类型的空值- 集合差集/
isin操作:高效判断元素的存在性,快速定位目标值
内容的提问来源于stack exchange,提问作者beginner
相关产品推荐
相关产品推荐

