熊猫(python):最大列数在新列中定义新值
我有一个大约50列的df:熊猫(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
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','')