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,让它工作。是的,你是对的。我将为未来的访问者汉克斯·维克托编辑我的帖子,但这对我来说不起作用。这可能是因为如果数据类型不同,我不知道有多少可以告诉你为什么它不起作用。