【发布时间】:2015-05-07 02:24:01
【问题描述】:
使用以下代码:
import pandas as pd
df = pd.DataFrame({'ProbeGenes' : ['1431492_at Lipn', '1448678_at Fam118a','1452580_a_at Mrpl21'],
'(5)foo.ID.LN.x1' : [20.3, 25.3,3.1],
'(5)foo.ID.LN.x2' : [130, 150,173],
'(5)foo.ID.LN.x3' : [1.0, 2.0,12.0],
'(3)bar.ID.LN.x1' : [1,2,3],
'(3)bar.ID.LN.x2' : [4,5,6],
'(3)bar.ID.LN.x3' : [7,8,9]
})
new_cols = df.pop("ProbeGenes").str.split().apply(pd.Series)
new_cols.columns = ["Probe","Gene"]
df = df.join(new_cols)
cols = df.columns.tolist()
cols = cols[-2:] + cols[:-2]
df = df[cols]
df
我可以制作如下数据框:
Probe Gene (5)bar.ID.LN.x1 (5)bar.ID.LN.x2 (5)bar.ID.LN.x3 \
0 1431492_at Lipn 1 4 7
1 1448678_at Fam118a 2 5 8
2 1452580_a_at Mrpl21 3 6 9
(3)foo.ID.LN.x1 (3)foo.ID.LN.x2 (3)foo.ID.LN.x3
0 20.3 130 1
1 25.3 150 2
2 3.1 173 12
请注意,数据帧包含两个块(名为foo 和bar),每个块依次包含x1,x2,x3。我想要做的是总结每个块中的值,从而产生这个数据框:
Probe Gene foo bar
1431492_at Lipn 151.3 12
1448678_at Fam118a 177.3 15
1452580_a_at Mrpl21 188.1 18
实际数据可以包含两个以上的块名称。每个块将包含 2 或 3 个成员(x1,x2 或 x1,x2,x3)。
可以使用以下正则表达式/\(\d+\)(\w+)\..*/捕获块名称
我怎样才能做到这一点?
【问题讨论】: