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

如何拆分DataFrame:将col1、col2同但col3不同的记录移至新DataFrame

问题解决:按col1/col2分组筛选col3唯一的记录

给定如下DataFrame(其中col3、col4的值为列表类型):

col1 col2 col3 col4
x     y    [z]    [w]
x     y    [s]    [w]
c     d    [a]    [b]
c     d    [f]    [g]
t     p    [q]    [l]
t     p    [q]    [w]

需求:

  • 将col1、col2值相同但col3值存在差异的记录从原DataFrame移除,放入新DataFrame
  • 原DataFrame仅保留col1/col2分组内col3值完全一致的记录

实现步骤

由于列表是不可哈希类型,无法直接用于分组统计,需先将col3转换为可哈希的元组,再进行分组判断:

代码示例

import pandas as pd

# 构造原始DataFrame
df = pd.DataFrame({
    'col1': ['x', 'x', 'c', 'c', 't', 't'],
    'col2': ['y', 'y', 'd', 'd', 'p', 'p'],
    'col3': [['z'], ['s'], ['a'], ['f'], ['q'], ['q']],
    'col4': [['w'], ['w'], ['b'], ['g'], ['l'], ['w']]
})

# 1. 新增临时列,将col3的列表转为元组(可哈希类型)
df['col3_tuple'] = df['col3'].apply(tuple)

# 2. 按col1、col2分组,统计每组内col3的唯一值数量
group_unique_count = df.groupby(['col1', 'col2'])['col3_tuple'].nunique()

# 3. 筛选出需要保留的分组:唯一值数量为1(即该分组内col3无差异)
keep_groups = group_unique_count[group_unique_count == 1].index

# 4. 拆分DataFrame
original_df = df[df.set_index(['col1', 'col2']).index.isin(keep_groups)].drop('col3_tuple', axis=1)
new_df = df[~df.set_index(['col1', 'col2']).index.isin(keep_groups)].drop('col3_tuple', axis=1)

# 输出结果
print("处理后原DataFrame:")
print(original_df)
print("\n新DataFrame:")
print(new_df)

代码说明

  • 列表转元组:解决列表无法作为分组统计依据的问题,转成元组后可正常计算唯一值数量
  • 分组统计:通过groupby+nunique()获取每个(col1,col2)分组内col3的不同值数量
  • 筛选拆分:用isin和取反~分别筛选出需保留和移出的记录,最后删除临时列还原数据结构

内容的提问来源于stack exchange,提问作者Jakub Sapko

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 09:54:25