我有一个包含基本社交变量和许多其他协变量的数据框。对于sociodem变量,我想创建一个数据透视表,以便两列由Test Result
聚合。我想要一些按计数分类的变量和按中位数分类的变量。例如,我想捕获WBC
的中位数,但我想用Race
来计数。
我不确定如何构造我的数据透视表或groupby表,因为我知道该列需要为Test Result
,索引需要为其他协变量,但是我不能将多个索引作为不同的变量。 / p>
Example Dataframe
ID Race WBC_Count Cough (0/1) Test Result....
1 black 23.6 0 Positive
2 white 13.5 1 Negative
3 hispanic 20.3 0 Positive
Positive Negative
Black 23 54
White 23 56
Asian 34 18
...
WBC(median) 13.5 10.9
Cough(count) 23 13
答案 0 :(得分:1)
pandas.DataFrame.groupby
。pandas.DataFrame.agg
与不同的功能一起用于不同的列pandas.DataFrame.reset_index
在特定级别上以删除多索引。import pandas as pd
import numpy as np
import random
# sample data
np.random.seed(365)
random.seed(365)
data = {'a': [np.random.randint(10) for _ in range(25)],
'groups': [random.choice(['1-5', '6-25', '26-100', '100-500', '500-1000', '>1000']) for _ in range(25)],
'treatment': [random.choice(['Yes', 'No']) for _ in range(25)],
'date': pd.bdate_range(datetime.today(), freq='d', periods=25).tolist()}
df = pd.DataFrame(data)
# display(df.head())
a groups treatment date
2 >1000 Yes 2020-07-20
4 26-100 Yes 2020-07-21
1 >1000 Yes 2020-07-22
5 6-25 No 2020-07-23
2 26-100 Yes 2020-07-24
# groupby and aggregate different features of different columns
df.groupby(['groups', 'treatment']).agg({'a': 'mean', 'groups': 'count'}).reset_index(level='treatment')
treatment a groups
groups
1-5 No 5.000000 3
1-5 Yes 7.000000 1
100-500 No 5.500000 2
100-500 Yes 3.000000 2
26-100 No 9.000000 1
26-100 Yes 2.666667 3
500-1000 No 2.666667 3
500-1000 Yes 7.500000 2
6-25 No 5.500000 2
6-25 Yes 5.333333 3
>1000 Yes 2.000000 3