У меня есть датафрейм, как показано ниже
df = pd.DataFrame({
'subject_id':[1,1,1,1,2,2,2,2,3,3,4,4,4,4,4],
'readings' : ['READ_1','READ_2','READ_1','READ_3','READ_1','READ_5','READ_6','READ_8','READ_10','READ_12','READ_11','READ_14','READ_09','READ_08','READ_07'],
'val' :[5,6,7,11,5,7,16,12,13,56,32,13,45,43,46],
})
Мой вышеупомянутый входной фрейм выглядит следующим образом
ХотяПриведенный ниже код отлично работает (спасибо Jezrael) в пандах Python. Когда я применяю это к реальным данным (более 4 млн. записей), он работает долго. Поэтому я пытался использовать pyspark
. Обратите внимание, что я уже пробовал Dask
, modin
, pandarallel
, которые эквивалентны пандам для крупномасштабной обработки, но также не помогли. То, что делают следующие коды, является it generates the summary statistics for each subject for each reading
. Вы можете взглянуть на ожидаемый результат ниже, чтобы получить представление
df_op = (df.groupby(['subject_id','readings'])['val']
.describe()
.unstack()
.swaplevel(0,1,axis=1)
.reindex(df['readings'].unique(), axis=1, level=0))
df_op.columns = df_op.columns.map('_'.join)
df_op = df_op.reset_index()
Можете ли вы помочь мне выполнить вышеуказанную операцию в pyspark? Когда я попробовал следующее, он выдал ошибку
df.groupby(['subject_id','readings'])['val']
Например - subject_id = 1 имеет 4 чтения, но 3 уникальных чтения. Таким образом, мы получаем 3 * 8 = 24 столбца для subject_id = 1. Почему 8? Потому что это MIN,MAX,COUNT,Std,MEAN,25%percentile,50th percentile,75th percentile
. Надеюсь, что это поможет
Когда я начал с этим в pyspark, он возвращает следующую ошибку
TypeError: объект 'GroupedData' не является допустимымЯ ожидаю, что мой вывод будет таким, как показано ниже