Python-在特定字符或序列后修剪列
我很难找到适合我的场景的特定python命令 我想根据基因名称合并数据集。(ex/F44E5.4)对于大多数基因名称,都有100%的匹配,因此没有问题。对于其他基因,有一些变体在基因名称基的末尾指定为。#、小写元音或两者。(ex/F26D10.3.2、K01G5.8b、F52D10.3a.2) 我想修剪这些额外的信息位,以便与我的其他数据集合并 此外,如果存在变体,我希望选择更高的字母或#变体。(即a比b,或.1比.2)Python-在特定字符或序列后修剪列,python,regex,string,dataframe,Python,Regex,String,Dataframe,我很难找到适合我的场景的特定python命令 我想根据基因名称合并数据集。(ex/F44E5.4)对于大多数基因名称,都有100%的匹配,因此没有问题。对于其他基因,有一些变体在基因名称基的末尾指定为。#、小写元音或两者。(ex/F26D10.3.2、K01G5.8b、F52D10.3a.2) 我想修剪这些额外的信息位,以便与我的其他数据集合并 此外,如果存在变体,我希望选择更高的字母或#变体。(即a比b,或.1比.2) 您可以使用以下方法: In [25]: a.drop('gene_name
您可以使用以下方法:
In [25]: a.drop('gene_name',1) \
...: .groupby(a.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False)) \
...: .max() \
...: .join(b.drop('gene_name',1)
...: .groupby(b.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False))
...: .max()) \
...: .reset_index()
...:
Out[25]:
gene_name v_1 v_2
0 F26D10.3 2 0.4
1 F44E5.4 1 0.4
2 F52D10.3 2 0.7
3 K01G5.8 3 0.6
4 K52GGG.1 4 0.4
或者使用pd.merge()
方法:
In [26]: pd.merge(
...: a.drop('gene_name',1)
...: .groupby(a.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False))
...: .max(),
...: b.drop('gene_name',1)
...: .groupby(a.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False))
...: .max(),
...: left_index=True,
...: right_index=True
...: ).reset_index()
...:
Out[26]:
gene_name v_1 v_2
0 F26D10.3 2 0.4
1 F44E5.4 1 0.4
2 F52D10.3 2 0.7
3 K01G5.8 3 0.6
4 K52GGG.1 4 0.4
PS我用a
和b
代替了df1
和df2
,使它稍微短一点
In [26]: pd.merge(
...: a.drop('gene_name',1)
...: .groupby(a.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False))
...: .max(),
...: b.drop('gene_name',1)
...: .groupby(a.gene_name.str.extract(r'([^\.]*\.\d*)', expand=False))
...: .max(),
...: left_index=True,
...: right_index=True
...: ).reset_index()
...:
Out[26]:
gene_name v_1 v_2
0 F26D10.3 2 0.4
1 F44E5.4 1 0.4
2 F52D10.3 2 0.7
3 K01G5.8 3 0.6
4 K52GGG.1 4 0.4