熊猫(python):最大列数在新列中定义新值

熊猫(python):最大列数在新列中定义新值,python,pandas,numpy,max,apply,Python,Pandas,Numpy,Max,Apply,我有一个大约50列的df: Product ID | Cat1 | Cat2 |Cat3 | ... other columns ... 8937456 0 5 10 8497534 25 3 0 8754392 4 15 7 Cat表示一个类别中该产品的数量。现在我想添加一列“Category”,表示产品的主要类别(忽略其他列,只考虑Cat列) df_目标: Product ID | Cat1 | Cat

我有一个大约50列的df:

Product ID | Cat1 | Cat2 |Cat3 | ... other columns ...
8937456       0      5     10
8497534       25     3     0
8754392       4      15    7 
Cat表示一个类别中该产品的数量。现在我想添加一列“Category”,表示产品的主要类别(忽略其他列,只考虑Cat列)

df_目标:

Product ID | Cat1 | Cat2 |Cat3 | Category | ... other columns ...
8937456       0      5     10       3
8497534       25     3     0        1
8754392       4      15    7        2
我想我需要使用max和apply或map

我在stackoverflow上找到了这些,但它们没有解决类别分配问题。在Excel中,我将列从Cat 1重命名为1,并使用索引(match(max))

这里有一个简单的方法-

要将选择限制到这些列,请专门使用这些列标题/名称,然后使用
idxmax
,最后将字符串
Cat
替换为`空字符串,如下所示-

df['Category'] = df[['Cat1','Cat2','Cat3']].idxmax(1).str.replace('Cat','')
numpy.argmax
panda的idxmax
基本上可以沿轴获取max元素的ID


如果我们知道
Cat
列的列名从
1st
列开始,到
4th
列结束,我们可以对数据帧进行切片:
df.iloc[:,1:4]
而不是
df[['Cat1','Cat2','Cat3']
,谢谢您的快速回复;我可以问一下,argmax是如何工作的吗?不幸的是,我在df中还有其他列;有没有办法将其限制为这些列,或者我应该将所需的列保存为自己的df?选择这些列,然后使用
.values
.uhh!明亮的测试df['Category']=df['Cat1','Cat2','Cat3']].idxmax(1).str.replace('Cat','')工作正常;惊人的一行;谢谢你-希望我能多投一票
df['Category'] = df[['Cat1','Cat2','Cat3']].idxmax(1).str.replace('Cat','')