python - pandas 行中最大值的决胜局

标签 python pandas dataframe

我正在处理的数据集示例:

import pandas as pd
# List of Tuples
matrix = [(1, 0.3, 0, 0.7, 30, 0, 50),
          (2, 0.4, 0.4, 0.3, 20, 50, 30),
          (3, 0.5, 0.2, 0.3, 30, 20, 30),
          (4, 0.7, 0, 0.3, 100, 0, 40),
          (5, 0.2, 0.4, 0.4, 50, 30, 80)
          ]
# Create a DataFrame
df = pd.DataFrame(matrix, columns=["id", "terror", "drama", "action", "val_terror", "val_drama", "val_action"])

enter image description here

我的目标是创建一个列,引用每个客户的类型的最高值(value)(首先仅考虑前三列)。例如,在第一行中,操作值获胜。

但是在第二行,我们有平局。在 df.max(axis=1) 函数之后,我们将得到它观察到的第一个最大值(这将是为了恐怖)。在出现平局的情况下,我希望收到具有最高值的类型,例如,在第二行中它将是 val_drama。像这样的东西:

enter image description here

我想到将数据帧分成具有相等值的 id,并对两个数据帧应用 max(axis=1),然后加入。但我没有成功完成这项任务。

最佳答案

使用numpy.where
在前两行中,我创建两个子集只是为了更容易引用。 然后我使用 numpy.where 检查行最大值是否出现多次。如果是,我检查其他三列。

import numpy as np
ss1 = df[["terror", "drama", "action"]]
ss2 = df[["val_terror", "val_drama", "val_action"]]
df["largest_score"] = np.where(ss1.eq(ss1.max(axis=1), axis=0).sum(axis=1) > 1,
                               ss2.idxmax(axis=1).str.replace("val_", ""),
                               ss1.idxmax(axis=1))

关于python - pandas 行中最大值的决胜局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74198995/

相关文章:

python - 在 Keras 中对句子的词向量进行平均 - 预训练词嵌入

python - 严格高于原始曲线的平滑算法

python - 如何使用 Pandas 只读取 excel 标题?

python - 修复GEOJson自交点

python - 如何在 Node.js 中同步运行 Python 脚本?

python - Pandas DataFrame --> GroupBy --> 多索引过程

python - Pandas 合并两个具有相同结构的数据框

r - dplyr::full_join 未按预期工作

python - 填充其他拖车数据框的值

python - 在 matplotlib 轴上设置科学限制后调整指数文本