Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.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 根据首选项选择列(DF)_Python_Pandas - Fatal编程技术网

Python 根据首选项选择列(DF)

Python 根据首选项选择列(DF),python,pandas,Python,Pandas,我正在尝试在我的数据框架中创建一个新列,以便根据首选项列表为每个代码获得最佳契约,即: F, N, J, V, Z, U, M, H, X, Q, K, G 代码C1 C2 C3 r1nq0 r2f0 r3vzu 所需输出: 代码C1 C2 C3合同 r1nq0n r2f0f R3 V Z U V 我在Excel中成功地做到了这一点,将首选项从12排到1,因此我使用VLOOKUP获得了每个合同的排名,然后得到了最好的一个 我曾想过使用MERGE,但似乎做不好 提前感谢。您可以将字符串转换为数

我正在尝试在我的数据框架中创建一个新列,以便根据首选项列表为每个代码获得最佳契约,即:

F, N, J, V, Z, U, M, H, X, Q, K, G 
代码C1 C2 C3 r1nq0 r2f0 r3vzu

所需输出:

代码C1 C2 C3合同 r1nq0n r2f0f R3 V Z U V

我在Excel中成功地做到了这一点,将首选项从12排到1,因此我使用VLOOKUP获得了每个合同的排名,然后得到了最好的一个

我曾想过使用MERGE,但似乎做不好


提前感谢。

您可以将字符串转换为数值,然后使用Dataframe.max。我假设您几乎没有对列表进行编码,但可以使用迭代方法:

清理类={C1:{F:15,N:14…}, C2:{F:15,N:14…}, C3:{F:15,N:14…} df.replacecleanup\u目录,就地=真 现在,值被编码为数字。您可以使用max操作 df['Contract']=df.loc[:,['C1','C2','C3']].maxaxis=1
替换。。。在列表的其余部分。数字15是任意的

您可以创建一个从每行构造的新列。你应该把合同转换成一种格式,这样可以加快我从字典里查到的速度

priorities = ['F', 'N', 'J', 'V', 'Z', 'U', 'M', 'H', 'X', 'Q', 'K', 'G' ]
priorities_dict = {
    letter: index 
    for letter, index in enumerate(priorities)
}
df['Contract'] = [
    priorities[
        min(
            priorities_dict[row['C1']], 
            priorities_dict[row['C2']], 
            priorities_dict[row['C3']]
       )
    ]
    for row in df
] 

# Print the DataFrame 
print(df) 

谢谢Roim,这就成功了。我唯一做的改变就是把maxaxis=1,让它工作。是的,你是对的。我将为未来的访问者汉克斯·维克托编辑我的帖子,但这对我来说不起作用。这可能是因为如果数据类型不同,我不知道有多少可以告诉你为什么它不起作用。