我下面有一个数据框,显示了两个不同供应商的木材和钢材价格。你知道吗
我想添加一个列,显示来自同一供应商的相对项目的最高价格(即,如果线是木材,它会拉钢)。你知道吗
例如,“汤姆”的“钢”行将显示他的最高木材价格42。你知道吗
到目前为止,我得到的代码只是返回原始项目的最高价格(即不是相反的,所以对于Tom的steel行返回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
如果您可以找到每个供应商+项目的最大值,那么您只需交换这些值,并通过
join
将它们分配回:注意:连接后将不会保留数据的顺序。你知道吗
您可以
map
将groupby前面的值转换为相反的值,然后将其合并回原始数据帧。你知道吗相关问题 更多 >
编程相关推荐