如何用Python获取三元韦恩图166黄色区域的实际数据?
筛选三元韦恩图中独有的数据(以dfA独有的黄色区域为例)
假设你的三个DataFrame都有一个用来匹配的主键列(比如id、user_id这类唯一标识列),要找出仅在dfA中存在、同时不在dfB和dfC里的数据,按以下步骤来:
- 第一步:先把dfA和dfB做左连接,筛选出dfA中没有在dfB里匹配到的行
- 第二步:把第一步的结果再和dfC做左连接,筛选出没有在dfC里匹配到的行,最终得到的就是仅属于dfA的数据集(对应你图里的166黄色区域)
具体代码示例(以user_id作为匹配列):
# 筛选dfA中不在dfB的数据 a_excl_b = dfA.merge(dfB, on='user_id', how='left', indicator=True) a_excl_b = a_excl_b[a_excl_b['_merge'] == 'left_only'].drop(columns='_merge') # 从上面的结果中再排除dfC的数据,得到仅属于A的部分 only_a = a_excl_b.merge(dfC, on='user_id', how='left', indicator=True) only_a = only_a[only_a['_merge'] == 'left_only'].drop(columns='_merge') # 验证数量是否为166 print(len(only_a))
如果你的黄色区域是其他独有的部分(比如仅属于dfB或dfC),只需要替换对应的DataFrame即可,逻辑完全一致。
要是你想找三个DataFrame的共同交集(韦恩图中间的重叠区域),用三次inner连接就行:
common_data = dfA.merge(dfB, on='user_id').merge(dfC, on='user_id')
内容的提问来源于stack exchange,提问作者Mark Heptonstall
相关产品推荐
相关产品推荐

