首页 > 解决方案 > 基于唯一值将数据帧子集为小数据帧并同时写入 csv 文件的有效方法

问题描述

df根据唯一/过滤条件将大型数据帧子集化为小子集的最有效方法是什么?例如,我有一个维度为 22050 行 5 列的数据集,如下所示

id, nationality, age, gender, income 
10001, France, 20, M, 45007
13328, UK, 52, F, 72308
11654, USA, 57, F, 95645
11765, UK, 39, M, 77343
10081, UAE, 41,M, 83117
10503, France, 22, F, 25665

csv整个数据集中有 15 个不同的国籍,我想根据 15 个不同的国家将数据集分成 15 个数据框,同时在 15 个输出文件中写出 15 个数据框。

所需的输出应如下所示

csv文件中的数据框一

id, nationality, age, gender, income
10001, France, 20, M, 45007
10503, France, 22, F, 25665

csv文件中的数据框二

13328, UK, 52, F, 72308
11765, UK, 39, M, 77343

同样适用于数据帧 3 到 15

这是我的尝试:

fran = df[df.nationality == 'France']
fran.to_csv(file_name, sep=',')
uk = df[df.nationality =='UK']
uk.to_csv(file_name, sep=',')
USA = df[df.nationality == 'USA']
usa.to_csv(file_name, sep=',')

我想要一种更有效的方式,apply | lambda或者一种loop方法

标签: pythonrpandasdataframecsv

解决方案


base R中,我们可以按“国籍”列将数据拆分listdata.frame

lst1 <- split(df, df$nationality)

然后循环list并将其写入不同的文件

lapply(names(lst1), function(nm) write.csv(lst[[nm]], 
          paste0(nm, ".csv"), row.names = FALSE, quote = FALSE))

注意:该方法比基于子集的split方法要快得多==


推荐阅读