Ниже у меня есть данные, показывающие цены на дерево и сталь от двух разных поставщиков.
Я хотел бы добавить столбец, который показывает самую высокую цену для противоположного предмета (то есть, если линия - это дерево, она будет тянуть сталь) от того же поставщика.
Например, в строке «Сталь» для «Тома» будет показана его самая высокая цена на древесину - 42.
Код, который у меня есть, просто возвращает самую высокую цену за оригинальный предмет (т.е. не наоборот, поэтому для стального ряда Тома возвращается 24, но я бы хотел, чтобы он возвратил 42).
Я думаю, что это проблема с получением максимального значения для мультигруппы. Я пробовал несколько разных способов, но, похоже, просто не могу его получить.
Любые мысли будут с благодарностью.
import pandas as pd
import numpy as np
data = {'Supplier':['Tom', 'Tom', 'Tom', 'Bill','Bill','Bill'],'Item':['Wood','Wood','Steel','Steel','Steel','Wood'],'Price':[42,33,24,16,12,18]}
df = pd.DataFrame(data)
df['Opp_Item'] = np.where(df['Item']=="Wood", "Steel", "Wood")
df['Opp_Item_Max'] = df.groupby(['Supplier','Opp_Item'])['Price'].transform(max)
print(df)
Supplier Item Price Opp_Item Opp_Item_Max
0 Tom Wood 42 Steel 42
1 Tom Wood 33 Steel 42
2 Tom Steel 24 Wood 24
3 Bill Steel 16 Wood 16
4 Bill Steel 12 Wood 16
5 Bill Wood 18 Steel 18