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

Posted

技术标签:

【中文标题】熊猫(python):列中的最大值在新列中定义新值【英文标题】:Pandas (python): max in columns define new value in new column 【发布时间】:2017-09-05 22:23:58 【问题描述】:

我有一个大约 50 列的 df:

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

Cat 表示该产品有多少数量属于某个类别。现在我想添加一个“类别”列,表示产品的主要类别(忽略其他列,只考虑 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 和 apply 还是 map?

我在 *** 上找到了这些,但它们没有解决类别分配问题。在 Excel 中,我将列从 Cat 1 重命名为 1 并使用 index(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

【问题讨论】:

【参考方案1】:

这是numpy.argmax 的 NumPy 方式 -

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] 而不是@987654333 @。

【讨论】:

感谢您的快速回复;请问,argmax 是如何工作的?不幸的是,我在 df 中还有其他列;有没有办法将其限制为这些列,或者我应该将所需的列保存为自己的 df? 选择那些列然后使用.values 呃!杰出的!测试 df['Category'] = df[['Cat1','Cat2','Cat3']].idxmax(1).str.replace('Cat','') 完美运行;惊人的一个班轮;谢谢 - 希望我能给它不止一票

以上是关于熊猫(python):列中的最大值在新列中定义新值的主要内容,如果未能解决你的问题,请参考以下文章

如何迭代熊猫数据框并创建新列

熊猫从数据框中的一列中提取部分字符串并将其存储在一个新列中

循环遍历 pandas 数据框列中的列表元素以在新列中返回列表

将列中的所有值复制到熊猫数据框中的新列

如果 ID 存在于其他数据框中,则 Python Pandas 数据框在新列中添加“1”

从数据库列和 C# 中的 textBox 值中扣除值,扣除后的值必须存储在新列中