【发布时间】:2020-04-27 15:29:04
【问题描述】:
我需要减少数据名并将其导出到镶木地板。我需要确保我有前任。一列中的每个值对应 10000 行。
我正在使用的数据框如下所示:
+-------------+-------------------+
| Make| Model|
+-------------+-------------------+
| PONTIAC| GRAND AM|
| BUICK| CENTURY|
| LEXUS| IS 300|
|MERCEDES-BENZ| SL-CLASS|
| PONTIAC| GRAND AM|
| TOYOTA| PRIUS|
| MITSUBISHI| MONTERO SPORT|
|MERCEDES-BENZ| SLK-CLASS|
| TOYOTA| CAMRY|
| JEEP| WRANGLER|
| CHEVROLET| SILVERADO 1500|
| TOYOTA| AVALON|
| FORD| RANGER|
|MERCEDES-BENZ| C-CLASS|
| TOYOTA| TUNDRA|
| FORD|EXPLORER SPORT TRAC|
| CHEVROLET| COLORADO|
| MITSUBISHI| MONTERO|
| DODGE| GRAND CARAVAN|
+-------------+-------------------+
我需要为每个模型返回最多 10,000 行:
+--------------------+-------+
| Model| count|
+--------------------+-------+
| MDX|1658647|
| ASTRO| 682657|
| ENTOURAGE| 72622|
| ES 300H| 80712|
| 6 SERIES| 145252|
| GRAN FURY| 9719|
|RANGE ROVER EVOQU...| 4290|
| LEGACY WAGON| 2070|
| LEGACY SEDAN| 104|
| DAKOTA CHASSIS CAB| 8|
| CAMARO|2028678|
| XT| 10009|
| DYNASTY| 171776|
| 944| 43044|
| F430 SPIDER| 506|
|FLEETWOOD SEVENTY...| 6|
| MONTE CARLO|1040806|
| LIBERTY|2415456|
| ESCALADE| 798832|
| SIERRA 3500 CLASSIC| 9541|
+--------------------+-------+
This question 不一样,因为正如其他人在下面建议的那样,它只检索值大于其他值的行。我想要for each value in df['Model']: limit rows for that value(model) to 10,000 if there are 10,000 or more rows(显然是伪代码)。换言之,如果超过 10,000 行,则删除其余行,否则保留所有行。
【问题讨论】:
-
将 distinct() 不做你需要的......我不认为我理解你的问题。你能提供更多的代码和数据吗..
-
窗口函数是一种方式。您还可以按品牌和模型进行分区,然后使用索引映射分区并传入一个函数,该函数返回索引小于 1000 的所有行。
-
@Ravaal 请更详细地解释为什么发布的副本没有回答您的问题。最好的方法是创建一个带有少量模型的minimal reproducible example,并将阈值设为一个较小的数字(如 3)以准确显示所需的输出。
-
@pault 我已经尝试解释了很多次了。我不明白这有什么难理解的。如果每个值的行数超过 10K,则只返回 10K ROWS FOR THAT VALUE。如果行数少于 10K,则返回所有行。这会给我一个小得多的样本,我可以使用它。不幸的是,我无法进入我的实例并使用代码。这对我的公司来说非常昂贵......
标签: apache-spark pyspark pyspark-dataframes