Python 我们如何为numpy nunique方法应用自定义功能? 让我们考虑下面的代码, [sample.csv] Name Year Status 1 ABC 2017 200 2 DEF 2017 404 3 GHI 2018 404 4 JKL 2017 500 5 MNO 2017 200 6 PQR 2017 301

Python 我们如何为numpy nunique方法应用自定义功能? 让我们考虑下面的代码, [sample.csv] Name Year Status 1 ABC 2017 200 2 DEF 2017 404 3 GHI 2018 404 4 JKL 2017 500 5 MNO 2017 200 6 PQR 2017 301,python,pandas,csv,numpy,pandas-groupby,Python,Pandas,Csv,Numpy,Pandas Groupby,预期产量, 从“状态”列计数并按“年份”列分组的唯一记录数总和,不直接使用“nunique()”,但使用“chunk”概念(例如,一次两条记录) 与通常获取列的唯一值数量一样 dataset = pd.read_csv(source_file) dataset.groupby(['year']).nunique() 现在我使用以下代码来实现“nunique()”功能,但有时在处理非常大的CSV文件(超过5GB)时,它不会返回正确的结果 我们如何在不使用内置函数“nunique()”的情况下获得

预期产量,

从“状态”列计数并按“年份”列分组的唯一记录数总和,不直接使用“nunique()”,但使用“chunk”概念(例如,一次两条记录)

与通常获取列的唯一值数量一样

dataset = pd.read_csv(source_file)
dataset.groupby(['year']).nunique()
现在我使用以下代码来实现“nunique()”功能,但有时在处理非常大的CSV文件(超过5GB)时,它不会返回正确的结果

我们如何在不使用内置函数“nunique()”的情况下获得相同的结果


有什么想法吗,那么请。。。谢谢

让我们尝试不同的方法,使用
pd.factorize

df.groupby('Year')['Status'].apply(lambda x: max(pd.factorize(x)[0]) + 1)
输出:

Year
2017    4
2018    1
Name: Status, dtype: int64

您在块级别进行了筛选,但没有跨块进行筛选:

data_grp1 = pd.concat([data_grp1, gb['status'].unique()])
您需要做的是在构建最终的
数据\u grp1
后再次过滤,如:

data_grp2 = data_grp1.groupby('Year').apply(lambda df: df.drop_duplicates(subset=['status']))

然后对
数据\u grp2

进行最终分析,我们是否必须使用它,而不是
“res=data\u grp1.groupby(['year',level=0,axis=0)[0]。apply(nu\u fn)”
?我得到
键错误:'year'
,如果一旦我添加了
“level=0”
,那么我得到另一个问题,
键错误:索引(['Status',dtype='object
data_grp2 = data_grp1.groupby('Year').apply(lambda df: df.drop_duplicates(subset=['status']))