Python - 在特定字符或序列之后修剪列

时间:2017-02-28 22:10:31

标签: python regex string dataframe

我无法为我的场景找到特定的python命令。

我想根据基因名称合并数据集。 (例如/ F44E5.4)对于大多数基因名称,有100%匹配,所以没问题。对于其他基因,存在用基因名称末端的#。,小写元音或两者都指定的变体。 (例如:/ F26D10.3.2,K01G5.8b,F52D10.3a.2)。

我想修剪那些额外的信息,以便与我的其他数据集合并。

同样在有变种的情况下,我想选择更高的字母或#变体。 (即/ a超过b,或.1超过.2)

ClosedXML

1 个答案:

答案 0 :(得分:1)

你可以使用这种方法:

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我使用ab而不是df1df2来缩短它...