如何在Excel中按城市列条件保留最多1000行数据?
如何在Excel中按城市列条件保留最多1000行数据?
当然可以做到!而且完全不用SQL或Python,用Excel自带的功能就能搞定,操作也不算复杂,适合日常用Excel的朋友。我给你两种实用方法,按需选择就行:
方法一:辅助列手动筛选法(通用所有Excel版本)
这种方法直观易懂,适配所有Excel版本,还能选择固定保留前1000行,或者随机保留1000行(避免每次都选同一批数据):
场景1:保留每个城市的前1000行(按原顺序)
- 给数据新增一个辅助列(比如C列),在C2单元格输入公式:
=COUNTIF($B$2:B2,B2)
下拉填充到所有行。这个公式会按城市给每行连续编号——比如纽约的第一行是1,第二行是2,直到第5000行是5000;明尼阿波利斯的行就是1到300。 - 全选所有数据(包括表头),点击「数据」选项卡的「排序」:先按B列(城市)排序,再按C列(编号)排序,这样同一个城市的行就会按编号整齐排列。
- 点击C列的筛选按钮,只勾选「小于或等于1000」的数值。筛选完成后,复制这些行到新工作表,就得到了你想要的结果——纽约、波士顿各留1000行,明尼阿波利斯的所有行都保留。
场景2:随机保留每个城市的1000行(避免固定批次)
如果不想每次都留同一批数据,想要随机筛选,可以调整辅助列:
- 先加D列,在D2输入
=RAND(),下拉填充给每行生成一个0到1之间的随机数。 - 再在C2输入数组公式(Excel 2019及以下版本需要按
Ctrl+Shift+Enter确认,365/2021版本直接回车即可):=RANK.EQ(D2,IF($B$2:$B$100000=B2,$D$2:$D$100000,""),1)
这个公式会按城市分组对随机数排名,每个城市里的行都会有1到n的随机排名。 - 后续步骤和场景1一致:排序、筛选C列<=1000的数值,复制结果即可。
方法二:动态数组公式法(适合Excel 365/2021)
如果你的Excel是365或2021版本,支持动态数组功能,那可以一步到位,不用手动排序筛选:
在新工作表的A1单元格输入以下公式(直接回车即可,公式会自动扩展生成结果):
=LET( all_data, A2:B100001, // 替换成你的实际数据范围(含内容不含表头) city_col, INDEX(all_data,,2), row_ids, ROW(all_data), // 按城市分组给每行排名,这里用行号排序,要随机的话把ROW换成RANDARRAY rank_per_city, BYROW(row_ids, LAMBDA(r, RANK.EQ(r, FILTER(row_ids, city_col=INDEX(city_col,r-ROW(A2)+1)),1))), // 筛选出排名<=1000的行 FILTER(all_data, rank_per_city <= 1000) )
公式说明:用LET定义变量简化逻辑,BYROW给每个城市的行单独排名,最后用FILTER直接输出符合条件的所有行。如果要随机筛选,把公式里的ROW(all_data)改成RANDARRAY(ROWS(all_data))即可。
备注:内容来源于stack exchange,提问作者J B
相关产品推荐
相关产品推荐

