#python #pandas #dataframe #pandas-groupby #series
Вопрос:
У меня есть фрейм данных, как показано ниже, но мой реальный фрейм данных содержит миллионы строк
te_df = pd.DataFrame({'subject_id':[1,1,1,2,2,2,3,3],
'test':['test1','test2','test3','test1','test2','test3','test1','test4'],
'0-24hrs':[1,1,1,2,1,1,np.nan,np.nan],
'24-48hrs':[np.nan,np.nan,np.nan,1,1,1,2,1],
'48-72hrs':[2,3,1,3,3,np.nan,np.nan,np.nan]
})
Я хотел бы узнать median
, сколько раз проводится тест (идентификация using test column
) каждые 24 часа (с использованием 0-24hrs
, 24-48hrs
, 48-72hrs
)
Я попробовал следующее
df_out = pd.DataFrame()
df_out['1st_24'] = te_df.groupby('test')['0-24hrs'].median()
df_out['2nd_24'] = te_df.groupby('test')['24-48hrs'].median()
df_out['3rd_24'] = te_df.groupby('test')['48-72hrs'].median()
Вместо того, чтобы повторять одну и ту же строку трижды, есть ли какой-либо другой эффективный и элегантный способ найти это? Потому что в моем реальном фрейме данных миллион строк
Комментарии:
1. В чем дело
te_df.groupby('test').median()
?
Ответ №1:
Почему бы не попробовать
out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()
0-24hrs 24-48hrs 48-72hrs
test
test1 1.5 1.5 2.5
test2 1.0 1.0 3.0
test3 1.0 1.0 1.0
test4 NaN 1.0 NaN
Комментарии:
1.
FutureWarning: Indexing with multiple keys (implicitly converted to a tuple of keys) will be deprecated, use a list instead.
🙂2. @QuangHoang ах, ты попался ~
Ответ №2:
Вы также можете сделать это с помощью:-
df_out=te_df.groupby('test').median().drop(columns=['subject_id'])
#output
0-24hrs 24-48hrs 48-72hrs
test
test1 1.5 1.5 2.5
test2 1.0 1.0 3.0
test3 1.0 1.0 1.0
test4 NaN 1.0 NaN
Примечание: В методе @BENY для доступа к значениям столбцов путем передачи списка вы не получите предупреждение:
out = df.groupby('test')[['0-24hrs', '24-48hrs', '48-72hrs']].median()