#python #pandas #dataframe
#python #pandas #фрейм данных
Вопрос:
У меня есть набор данных, который выглядит следующим образом:
ID HEMO_Counts PLATE_Counts ESR_Counts CRP_Counts COVID POS
0 23 2 6 1
1 0
2 54 23 0
3 234 4 9 1
4 75 6 0
5 64 16 1
Я хочу создать таблицу, в которой каждое лабораторное значение (HEMO_Counts, PLATE_Counts, ESR_Counts, CRP_Counts) имеет значение индекса, а количество каждого лабораторного значения разделено на два столбца по COVID POS
LAB 0 1
Hemo 1 3
Plate 2 0
ESR 1 2
CRP 0 3
Я написал следующий код, но вывод неверен:
LABS_VAR=['HEMO_Counts','PLATE_Counts','ESR_Counts','CRP_Counts']
for lab in LABS_VAR:
TEST=pd.pivot_table(df_merged2,values=[lab], columns='Covid_pos', aggfunc=lambda x: len(x.unique()))
TESTING = pd.DataFrame(TEST.to_records()).rename(columns={'index':'Lab'})
DF=TESTING.append(TESTING)
Labs_Count_Results = pd.DataFrame(DF)
Я на правильном пути или есть более простой способ сделать это?
Комментарии:
1.
df.groupby('COVID POS').count().reset_index().T
2. Спасибо — не могли бы вы добавить больше контекста к этому решению?
3. @Matt всегда был поклонником
df.groupby('COVID_POS', as_index=False).count().T
4. Что делает буква «T» в этой строке кода?
5. @Raven
T
предназначен для транспонирования фрейма данных..
Ответ №1:
Сначала filter
столбцы, содержащие _Counts
, затем groupby
эти столбцы с помощью COVID POS
и agg count
, наконец, с помощью rstrip
удаления _Counts
части из индекса:
d = df.filter(like='_Counts').groupby(df['COVID POS'])
.count().T.rename_axis(columns='LAB')
d.index = d.index.str.rstrip('_Counts')
LAB 0 1
HEMO 1 3
PLATE 2 0
ESR 1 2
CRP 0 3