Python 从数据帧的列中排序和提取数据?

Python 从数据帧的列中排序和提取数据?,python,pandas,Python,Pandas,我有一个包含排名信息的文件: df1 和另一个包含以分隔的值的文件 df2[“变体”] A|intron_variant&NMD_transcript_variant|MODIFIER|23||,A|intron_variant&non_coding|MODIFIER|||,A|intron_variant&non_coding|MODIFIER||| G|missense_variant&splice_region_variant|HIGH|85||,A|int

我有一个包含排名信息的文件:

df1

和另一个包含以分隔的值的文件

df2[“变体”]

A|intron_variant&NMD_transcript_variant|MODIFIER|23||,A|intron_variant&non_coding|MODIFIER|||,A|intron_variant&non_coding|MODIFIER|||
G|missense_variant&splice_region_variant|HIGH|85||,A|intron_variant&non_coding|MODIFIER|||,A|intron_variant&non_coding|MODIFIER|||
G|missense_variant|MODERATE|23||,G|frameshift&intron_variant|HIGH|||,G|intron_variant&non_coding|MODIFIER|||,G|frameshift&missense_variant|HIGH|42||
G|missense_variant|MODERATE|23||,G|intron_variant|MODIFIER|||,G|intron_variant&non_coding|MODIFIER|||,G|stop_gained&splice_region_variant|HIGH|||
G|missense_variant|MODERATE|23||
G|missense_variant&stop_lost|HIGH|12||
我想根据df1中提到的排名顺序从df2['Variants']中提取数据。数据中的一些复杂情况是,有时它们与&as移码&intron_变体结合使用。在这种情况下,我想把数据分开并考虑它们的排名。同样,我想从数据中提取如下值:

Extracted                                                   Ranked
A|intron_variant&NMD_transcript_variant|MODIFIER|23||       intron_variant
G|missense_variant&splice_region_variant|HIGH|85||          splice_region_variant
G|frameshift&intron_variant|HIGH|||                         frameshift
G|stop_gained&splice_region_variant|HIGH|||                 stop_gained
G|missense_variant|MODERATE|23||                            missense_variant
G|missense_variant&stop_lost|HIGH|12||                      stop_lost
我能够使用&使用给定的代码分割文件。但无法从以逗号分隔的多个值中提取df1中给出的高级变量


谢谢

您可以将列表理解更改为先按|或拆分,然后按&:

编辑:

对于get ALL values SPLITED by,我更喜欢先拆分为,然后拆分为&或|的pandas解决方案:


您可以将列表理解更改为先按|或拆分,然后按&:

编辑:

对于get ALL values SPLITED by,我更喜欢先拆分为,然后拆分为&或|的pandas解决方案:


@耶斯雷尔,请看数据

#df1
Type    Rank
a       1
b       2
c       3
d       4
e       5

#df2['Variants']

K|a&b|MOD|,K|d|LOW|,K|a&e|MOD|
J|c&d&a|MOD|,J|b&c&d|MOD|
H|b&c|HIGH|,H|b|

#output
Extracted                   Ranked
K|a&b|MOD|                  a
J|c&d&a|MOD|                a
H|b&c|HIGH|                 b

@耶斯雷尔,请看数据

#df1
Type    Rank
a       1
b       2
c       3
d       4
e       5

#df2['Variants']

K|a&b|MOD|,K|d|LOW|,K|a&e|MOD|
J|c&d&a|MOD|,J|b&c&d|MOD|
H|b&c|HIGH|,H|b|

#output
Extracted                   Ranked
K|a&b|MOD|                  a
J|c&d&a|MOD|                a
H|b&c|HIGH|                 b

谢谢你的回答,这里的问题是,我只需要变量中的一个值,但这里它提取逗号后的所有值。我只需要保留包含高级变量的值。。thanks@svp-是否可能更改see问题的数据样本?谢谢。@svp-答案已编辑。谢谢您的努力。。。!!!谢谢你的回答,这里的问题是,我只需要变量中的一个值,但这里它提取逗号后的所有值。我只需要保留包含高级变量的值。。thanks@svp-是否可能更改see问题的数据样本?谢谢。@svp-答案已编辑。谢谢您的努力。。。!!!不,它提取所有值。我只需要一个值,这是考虑排名变量。在第一种情况下,有三个值K | a&b | MOD |,K | d | LOW |,K | a&e | MOD |,从中我只需要K | a&b | MOD |,其中有一个具有高秩顺序的。。谢谢你看,yop,你是对的。will Spliting by,help?它看起来更复杂,就像first Iseals一样,为它工作。有一件事-这里是更好的解决方案,因为需要像K | a&b | MOD |一样解析多个值a、b和多个秩-1,2这样的每个键。为什么选择此解决方案是有原因的?不,它提取所有值。我只需要一个值,这是考虑排名变量。在第一种情况下,有三个值K | a&b | MOD |,K | d | LOW |,K | a&e | MOD |,从中我只需要K | a&b | MOD |,其中有一个具有高秩顺序的。。谢谢你看,yop,你是对的。will Spliting by,help?它看起来更复杂,就像first Iseals一样,为它工作。有一件事-这里是更好的解决方案,因为需要像K | a&b | MOD |一样解析多个值a、b和多个秩-1,2这样的每个键。为什么选择这种解决方案是有原因的?
d = df1.set_index('Type')['Rank'].to_dict()

df = (df2.assign(Extracted = df2['Variants'].str.split(','))
        .explode('Extracted')
        .assign(Ranked = lambda x: x['Extracted'].str.split('&|\|'))
        .explode('Ranked')
        .assign(Rank = lambda x: x['Ranked'].map(d))
        .sort_values('Rank')
        )
df = df[~df.index.duplicated()].sort_index()
print (df)
                         Variants     Extracted Ranked  Rank
0  K|a&b|MOD|,K|d|LOW|,K|a&e|MOD|    K|a&b|MOD|      a   1.0
1       J|c&d&a|MOD|,J|b&c&d|MOD|  J|c&d&a|MOD|      a   1.0
2                H|b&c|HIGH|,H|b|   H|b&c|HIGH|      b   2.0
#df1
Type    Rank
a       1
b       2
c       3
d       4
e       5

#df2['Variants']

K|a&b|MOD|,K|d|LOW|,K|a&e|MOD|
J|c&d&a|MOD|,J|b&c&d|MOD|
H|b&c|HIGH|,H|b|

#output
Extracted                   Ranked
K|a&b|MOD|                  a
J|c&d&a|MOD|                a
H|b&c|HIGH|                 b