2017-04-10 79 views
1

定义新的价值我有一个约50列的DF:熊猫(蟒蛇):最大的列在新列

Product ID | Cat1 | Cat2 |Cat3 | ... other columns ... 
8937456  0  5  10 
8497534  25  3  0 
8754392  4  15 7 

猫意味着产品的数量众多怎么掉进一个类别。现在我想添加一个表示产品大多数类别的“类别”列(忽略其他列并仅考虑Cat列)。

df_goal:

Product ID | Cat1 | Cat2 |Cat3 | Category | ... other columns ... 
8937456  0  5  10  3 
8497534  25  3  0  1 
8754392  4  15 7  2 

我想我需要使用max和应用或地图?

我发现了那些在stackoverflow,但他们不解决类别分配。在Excel中,我将Cat 1中的列重命名为1并使用索引(match(max))。

Python Pandas max value of selected columns

How should I take the max of 2 columns in a dataframe and make it another column?

Assign new value in DataFrame column based on group max

回答

3

这里有一个NumPy的方式与numpy.argmax -

df['Category'] = df.values[:,1:].argmax(1)+1 

要限制选择那些列,使用这些列标题/名专门然后使用idxmax并最终替换字符串Cat用`空字符串,像这样 -

df['Category'] = df[['Cat1','Cat2','Cat3']].idxmax(1).str.replace('Cat','') 

numpy.argmaxpanda's idxmax基本上得到我们最大元素的ID沿轴线。

如果我们知道了Cat列的列名在1st柱和结束开始在4th一个,我们可以数据框:中df.iloc[:,1:4]代替df[['Cat1','Cat2','Cat3']]

+0

感谢您的快速回复;请问,argmax如何工作?我不幸在df中还有其他列;有没有办法将它限制在那些列中,或者我应该将所需的列保存为它自己的df? – jeangelj

+0

选择这些列,然后使用'.values'。 –

+0

呃!辉煌!测试 – jeangelj