python - 如何根据优先级和特定值对数据框的列中的数据进行排名和提取?
问题描述
我有两个数据框:
首先,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
第二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
:
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|||
我试图通过拆分仅提取排名靠前df1['Type']
的,和. 我只想从中提取一个被认为是高等级的值。df2['Variants']
|
&
,
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
但是,它为某些行生成了不正确的输出。在这里,第 5 排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
谢谢。任何帮助表示赞赏
解决方案
推荐阅读
- python - 无法使用来自 Google Cloud 的 Jupyter Notebook 连接到 Google Colab
- python - 精确分数警告导致分数 = 0 sklearn
- python - 如何在odoo12中对many2many模型进行搜索?
- javascript - 如何在生产中混淆 Tailwindcss HTML 类名?
- javascript - 如何让机器人在 Discord 上编辑自己的消息
- flutter - Flutter Session 存储数据但不能基于它做出决策
- python-3.x - 如何可视化每个用户 ID 随着时间的推移登录到系统的计数列表,并且用户 ID 组登录 1、2、3、...n 次?
- python - 梯度计算所需的变量之一已被就地操作修改 [torch.cuda.FloatTensor [1, 64, 3, 3, 3]]
- c# - Kafka .Net Produce 与 ProduceAsync
- android - 构建Android时如何修复警告缺少类:org.conscrypt.ConscryptHostnameVerifier