Рассмотрим следующий код:
[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
Ожидаемый результат,
Сумма №.количество уникальных записей из столбца status и группировка по столбцу Year, без , напрямую используя "nunique ()" , но с "chunk" концепция (например, 2 записи одновременно)
Как обычно, для получения нет.уникальных значений для столбца,
dataset = pd.read_csv(source_file)
dataset.groupby(['year']).nunique()
Теперь я использую следующий код для достижения функциональности «nunique ()», но иногда он не возвращает правильный результат при обработке очень большого файла CSV(более 5 ГБ).
import pandas as pd
chunks = pd.read_csv(source_file, chunksize=100000)
data_grp1 = pd.DataFrame()
for dataset in chunks:
gb = dataset.groupby(['year'])
#data_grp1 = gb['status'].nunique()
# If we apply the above method/line directly,
# then our final result would not be correct (it is suitable for only
# one shot processing), so I'm using the following lines (Even,
# sometimes it is also returns the Incorrect result for large CSV files,
# small size files are OK!)
data_grp1 = pd.concat([data_grp1, gb['status'].unique()])
def nu_fn(x):
return len(set(np.concatenate(x.values, axis=0)))
res = data_grp1.groupby(['year'], level=0, axis=0)[0].apply(nu_fn)
print(res)
Как добиться того же результата, не используя встроенную функцию "nunique ()"?
Есть идеи, тогда, пожалуйста ... Спасибо!