Python 如何根据优先级和特定值对数据帧列中的数据进行排序和提取?
我有两个数据帧: 首先,Python 如何根据优先级和特定值对数据帧列中的数据进行排序和提取?,python,pandas,Python,Pandas,我有两个数据帧: 首先,df1: data = {'Type':['a', 'b', 'c', 'd', 'e'], 'Rank':[1, 2, 3, 4, 5]} df1 = pd.DataFrame(data) 框架如下所示: Type Rank 0 a 1 1 b 2 2 c 3 3 d 4 4 e 5 Variants 0 K|a&b|MOD||,K|d|LOW|,K|a&e|MOD|| 1
df1
:
data = {'Type':['a', 'b', 'c', 'd', 'e'],
'Rank':[1, 2, 3, 4, 5]}
df1 = pd.DataFrame(data)
框架如下所示:
Type Rank
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
Variants
0 K|a&b|MOD||,K|d|LOW|,K|a&e|MOD||
1 J|c&d&a|MOD|,J|b&c&d|MOD||
2 H|b&c|HIGH|,H|b|HIGH||
3 H|b&c|HIGH||
4 K|d|LOW||,K|a&e|MOD|||,K|a&b|MOD||
5 -|d|LOW|,K|a&e|MOD||,K|a&b|MOD|||
第二个df2
:
variants = {'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|HIGH||',
'H|b&c|HIGH||',
'K|d|LOW||,K|a&e|MOD|||,K|a&b|MOD||',
'-|d|LOW|,K|a&e|MOD||,K|a&b|MOD|||',]}
df2 = pd.DataFrame(variants)
df2
如下所示:
Type Rank
0 a 1
1 b 2
2 c 3
3 d 4
4 e 5
Variants
0 K|a&b|MOD||,K|d|LOW|,K|a&e|MOD||
1 J|c&d&a|MOD|,J|b&c&d|MOD||
2 H|b&c|HIGH|,H|b|HIGH||
3 H|b&c|HIGH||
4 K|d|LOW||,K|a&e|MOD|||,K|a&b|MOD||
5 -|d|LOW|,K|a&e|MOD||,K|a&b|MOD|||
我试图通过拆分
,和,
来提取df2['Variants']
中排名靠前的df1['Type']
。我只想从Variants
中提取一个值,它被认为是df1['Type']
中的高等级
我使用以下代码生成输出:
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()
结果是:
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|b&c&d|MOD|| a 1.0
2 H|b&c|HIGH|,H|b|HIGH|| H|b|HIGH|| b 2.0
3 H|b&c|HIGH|| H|b&c|HIGH|| b 2.0
4 K|d|LOW||,K|a&e|MOD|||,K|a&b|MOD|| K|d|LOW|| a 1.0
5 -|d|LOW|,K|a&e|MOD||,K|a&b|MOD||| K|a&b|MOD||| a 1.0
但是,它为某些行生成了不正确的输出。在这里,第五行df['Extracted']
应该具有K|a&e|MOD||
或K|a&b|MOD|
但它采用了K|d|LOW |
预期产出为
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|b&c&d|MOD|| a 1.0
2 H|b&c|HIGH|,H|b|HIGH|| H|b|HIGH|| b 2.0
3 H|b&c|HIGH|| H|b&c|HIGH|| b 2.0
4 K|d|LOW||,K|a&e|MOD|||,K|a&b|MOD|| K|a&e|MOD||| a 1.0
5 -|d|LOW|,K|a&e|MOD||,K|a&b|MOD||| K|a&b|MOD||| a 1.0
谢谢。感谢任何帮助我测试并得到了预期输出是上述解决方案的
。有一件事-原始数据帧中的默认索引是什么?可能在解决方案之前帮助df2=df2。重置索引(drop=True)
。我尝试了相同的方法,但第五行正在选择K | d | LOW |
hmmm,奇怪,对我来说工作正常。什么是print(df)
在df=df[~df.index.duplicated()?