Kun*_*uni 2 python dataframe pandas
我有这个熊猫数据框:
name,a,b,c,d,e,f,g,h,i,j
"Female, n (%)",1991 (38.26%),1018 (41.52%),438 (35.12%),771 (35.16%),244 (35.72%),343 (32.48%),316 (40.51%),177 (33.84%),133 (41.18%),792 (35.92%)
"Male, n (%)",3190 (61.30%),1426 (58.16%),803 (64.39%),1415 (64.52%),436 (63.84%),711 (67.33%),463 (59.36%),345 (65.97%),187 (57.89%),1403 (63.63%)
"Age, years",44.00 [38.00 - 50.00],43.00 [37.00 - 49.00],43.00 [37.00 - 49.00],44.00 [38.00 - 50.00],44.00 [39.00 - 50.00],44.00 [38.00 - 50.00],43.00 [37.00 - 49.00],45.00 [39.00 - 51.00],44.00 [37.00 - 50.00],45.00 [38.00 - 51.00]
Run Code Online (Sandbox Code Playgroud)
我想要做的是取值的中位数,但符合以下标准:
(\d%),那么我想提取该值[\d - \d],那么我想提取方括号前的数字。需要注意的是,每一行都将具有相同类型的数据。
预期结果:
我们可以replace在数据框中添加额外的字符,以便每行只包含括号中的数值或方括号前的数值,然后将提取值的 dtype 更改为float并median沿列轴取
d = {r'.*?\((.*)%\)': r'\1', r'^(\S+)\s\[.*': r'\1'}
df['median'] = df.set_index('name').replace(d, regex=True).astype(float).median(axis=1).values
Run Code Online (Sandbox Code Playgroud)
看网上 regex demo
stack重塑然后数据帧extract从堆叠的帧的数值,然后改变dtype提取的值以float及计算median上level=0
df['median'] = df.set_index('name').stack()\
.str.extract(r'((?<=\()\S+(?=%\))|^\S+(?=\s\[))', expand=False)\
.astype(float).median(level=0).values
Run Code Online (Sandbox Code Playgroud)
看网上 regex demo
name a b c d e f g h i j median
0 Female, n (%) 1991 (38.26%) 1018 (41.52%) 438 (35.12%) 771 (35.16%) 244 (35.72%) 343 (32.48%) 316 (40.51%) 177 (33.84%) 133 (41.18%) 792 (35.92%) 35.820
1 Male, n (%) 3190 (61.30%) 1426 (58.16%) 803 (64.39%) 1415 (64.52%) 436 (63.84%) 711 (67.33%) 463 (59.36%) 345 (65.97%) 187 (57.89%) 1403 (63.63%) 63.735
2 Age, years 44.00 [38.00 - 50.00] 43.00 [37.00 - 49.00] 43.00 [37.00 - 49.00] 44.00 [38.00 - 50.00] 44.00 [39.00 - 50.00] 44.00 [38.00 - 50.00] 43.00 [37.00 - 49.00] 45.00 [39.00 - 51.00] 44.00 [37.00 - 50.00] 45.00 [38.00 - 51.00] 44.000
Run Code Online (Sandbox Code Playgroud)