Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据优先级和特定值对数据帧列中的数据进行排序和提取?_Python_Pandas - Fatal编程技术网

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()?