Python能否基于特定参数对DataFrame分组?Excel大数据集如何筛选重复值?
当然可以!这两个都是数据处理里的高频需求,我来给你拆解清楚:
一、用Python给DataFrame按特定参数分组
完全没问题,用pandas的groupby()方法就能轻松实现,甚至可以同时按多个参数(比如你的示例里的Name和No.)联合分组。
先看你的示例数据,我们先构造对应的DataFrame:
import pandas as pd # 构造示例DataFrame1 df1 = pd.DataFrame({ 'Name': ['Bob', 'Joe', 'John', 'Bob', 'John'], 'No.': [2123320, 2832883, 2139300, 2123320, 2234903], 'Comment': ["Doesn't Matter", 'Whatever', 'Irrelevant', 'Something', 'Regardless'] }) # 构造示例DataFrame2 df2 = pd.DataFrame({ 'Name': ['Bob', 'Joe', 'John', 'Bob', 'John'], 'No.': [2123320, 2832883, 2139300, 2123320, 2234903], 'Report': ['Great', 'Solid', 'Awesome', 'Good', 'Fine'] })
1. 按单个/多个特定参数分组
比如你想按Name和No.这两个参数联合分组(因为Bob的No.是相同的,属于同一组):
# 按Name + No.联合分组 grouped_df1 = df1.groupby(['Name', 'No.']) # 遍历查看每组内容 for group_key, group_data in grouped_df1: print(f"分组键: {group_key}") print(group_data) print("---")
2. 分组后的常用操作
分组后还能做聚合、合并等操作,比如统计每组的行数,或者把每组的评论合并成字符串:
# 统计每组的行数 grouped_df1.size() # 合并每组的Comment内容 grouped_df1['Comment'].apply(', '.join)
如果需要把两个DataFrame按相同参数分组后合并,也可以结合merge()和groupby一起用,满足更复杂的需求。
二、处理Excel大型数据集,筛选含特定重复值的数据
面对大型数据集(几万甚至几十万行),手动在Excel里操作容易卡顿,这里给你两种实用方案:
方案1:用Python高效处理(支持xlsx/csv/xls)
用pandas读取文件后,精准筛选出重复行,速度比Excel界面快很多:
# 读取文件:csv用read_csv,xlsx用read_excel,xls需要指定engine='xlrd'(需安装xlrd<2.0版本) # 大型文件可以加chunksize分批读取,避免内存不足 df = pd.read_excel('large_dataset.xlsx') # 读取xlsx # df = pd.read_csv('large_dataset.csv') # 读取csv # df = pd.read_excel('large_dataset.xls', engine='xlrd') # 读取xls # 筛选出Name和No.都重复的所有行(keep=False保留所有重复行,包括第一次出现的) duplicate_rows = df[df.duplicated(subset=['Name', 'No.'], keep=False)] # 把结果保存到新文件 duplicate_rows.to_excel('filtered_duplicates.xlsx', index=False)
方案2:用Excel自带工具操作(适合不想写代码的情况)
如果一定要用Excel界面,推荐用Power Query处理大型数据,比普通操作高效太多:
- 点击「数据」→「获取数据」→「从文件」,选择你的xlsx/csv/xls文件导入Power Query编辑器;
- 在编辑器中,选中
Name和No.列,点击「主页」→「删除重复项」旁边的下拉箭头→「保留重复项」; - 确认后点击「关闭并上载」,就能得到只包含重复值的数据集。
如果数据量不算特别大,也可以用条件格式标记后筛选:选中目标列→「开始」→「条件格式」→「突出显示单元格规则」→「重复值」,标记后筛选高亮的单元格即可。
内容的提问来源于stack exchange,提问作者A.Code.1
相关产品推荐
相关产品推荐

