pandas 基于多个列中的最大值创建一个列,并使用相应的列名(而不是列值)

wfsdck30  于 2023-11-15  发布在  其他
关注(0)|答案(1)|浏览(122)

我下面有一个名为df_test的数组,它显示每个地区每个产品的得分。我想创建一个名为“最高得分产品”的列,它显示每个地区得分最高的相应产品名称。
我使用了max()函数来获得最高的产品分数,但是所需的输出应该显示产品名称,而不是“highest score product”列中的分数。
我尝试了df_test.idxmax(axis=“columns”),但是我得到了错误,可能是由于空值。但是,这些空值不能用0填充NA,因为所有数据值都必须保持原样(包括np.nan和None),以便在下游过程中进行特殊处理。
什么是实现这一目标的好方法?任何建议都将受到欢迎。

import pandas as pd
import numpy as np

region= 'region'
product1 = 'product1'
product2 = 'product2'
product3 = 'product3'
product4 = 'product4'
product5 = 'product5'

list_reg = ['region1', 'region2','region3','region4','region5','region6']
list_score1 = [100, 250, 350, 555,999999, 200000]
list_score2 = [41, 111, 12.14,16.18,np.nan,200003]
list_score3 = [7.04, 2.09, 11.14,2000320,22.17,np.nan]
list_score4 = [236,249,400,0.56,359,122]
list_score5 = [None, 1.33, 2.54, 1, 0.9, 3.2]

df_test = pd.DataFrame({region: list_reg,
                        product1: list_score1,   
                        product2: list_score2, 
                        product3: list_score3, 
                        product4: list_score4, 
                        product5: list_score5})

col = [product1,product2,product3,product4,product5]
df_test['highest score product'] = df_test[col].max(axis=1)
df_test

字符串
输出如下-x1c 0d1x
所需输出如下-

rt4zxlrg

rt4zxlrg1#

试试看:

df_test["highest score product"] = df_test.loc[:, "product1":"product5"].idxmax(axis=1)
print(df_test)

字符串
打印:

region  product1   product2    product3  product4  product5 highest score product
0  region1       100      41.00        7.04    236.00       NaN              product4
1  region2       250     111.00        2.09    249.00      1.33              product1
2  region3       350      12.14       11.14    400.00      2.54              product4
3  region4       555      16.18  2000320.00      0.56      1.00              product3
4  region5    999999        NaN       22.17    359.00      0.90              product1
5  region6    200000  200003.00         NaN    122.00      3.20              product2

相关问题