我有一个类似于以下的框架:
| ID|名字|姓氏(_N)|性|国家|
| --|--|--|--|--|
| 01 |约翰|Doe|男性|美国|
| 02 |约翰|Doe|男性|加拿大|
| 03 |约翰|Doe|男性|墨西哥|
| 04 |马克|凯|男性|意大利|
| 05 |约翰|Doe|男性|西班牙|
| 06 |马克|凯|男性|法国|
| 07 |约翰|Doe|男性|秘鲁|
| 08 |马克|凯|男性|印度|
| 09 |马克|凯|男性|老挝|
| 10 |约翰|Doe|男性|贝宁|
正如你所看到的,id和country列始终是唯一的,但是基于first_name,last_name和sex列的字符串框架有重复项。我希望能够找到这样的重复项,并且只保留其中的3个(最好是最后3个),并删除其余的。因此,在此操作之后,生成的字符串框架应该如下所示:
| ID|名字|姓氏(_N)|性|国家|
| --|--|--|--|--|
| 05 |约翰|Doe|男性|西班牙|
| 06 |马克|凯|男性|法国|
| 07 |约翰|Doe|男性|秘鲁|
| 08 |马克|凯|男性|印度|
| 09 |马克|凯|男性|老挝|
| 10 |约翰|Doe|男性|贝宁|
我该怎么做?任何帮助都很感激!
我试过这个:
window_spec = Window.partitionBy('first_name', 'last_name', 'sex').orderBy(F.desc('id'))
df_with_row_number = df.withColumn('row_number', F.row_number().over(window_spec))
filtered_df = df_with_row_number.filter('row_number <= 3')
result_df = filtered_df.drop('row_number')
字符串
这确实给了我给予我想要的结果,但我想知道是否有更有效的方法来实现这一点,因为它是一个具有更多行和列的大型数据集。
1条答案
按热度按时间n3ipq98p1#
你可以在你的框架中使用groupby方法。下面是一个例子:
字符串
它应该输出:
型