Python 从数据帧的列中排序和提取数据?
我有一个包含排名信息的文件: df1 和另一个包含以分隔的值的文件 df2[“变体”]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
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