我正在處理的資料集樣本:
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"])

我的目標是為每個客戶創建一個參考型別的最高價值的列(首先只考慮前三列)。例如,在第一行中,行動的價值獲勝。
但在第二排,我們打成平手。在 df.max(axis=1) 函式之后,我們將得到它觀察到的第一個值作為最大值(這將是為了恐怖)。在出現平局的情況下,我希望接收具有最高價值的型別,例如,在第二行中它將是 val_drama。就像是:

我想過將資料幀分成具有相等值的 id,并在兩個資料幀上應用 max(axis=1),然后加入。但我沒有成功完成這項任務。
uj5u.com熱心網友回復:
使用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))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519466.html
標籤:Python熊猫数据框
