根据另一列熊猫的值添加新列

时间:2020-06-01 14:29:28

标签: python pandas data-cleaning

任何人都可以帮忙,我是Python的新手,请多多包涵。

我的数据看起来像这样,但是具有所有可用的区域信息。我正在尝试创建一个新列“实际价格”,该列会根据区域得出价格。至于每次入境,我对每个地区都有不同的价格。这可能吗。

data = [[1, 'EDF', 'Eastern', 400, 500, 300], [2, 'EDF', 'Southern', 200, 100, 300], [3, 'NPower', 
        'Eastern', 600, 500, 700]] 


df = pd.DataFrame(data, columns = ['ID', 'Supplier', 'Region', 'Av Price', 'Eastern Price',  
'Southern Price']) 

df

3 个答案:

答案 0 :(得分:1)

我相信这就是您要寻找的:

df["actual_price"] = np.where(df.Region == "Eastern", df["Eastern Price"], df["Southern Price"])

结果:

List channel message

答案 1 :(得分:1)

IIUC,您可以在“地区”列的值中添加“价格”以匹配“价格按地区”的列名称后,在此处进行df.lookup

m = df.loc[:,df.columns.str.endswith("Price")]
df['actual_Price'] = m.lookup(df.index,df['Region'].add(" Price"))

print(df)
   ID Supplier    Region  Av Price  Eastern Price  Southern Price  \
0   1      EDF   Eastern       400            500             300   
1   2      EDF  Southern       200            100             300   
2   3   NPower   Eastern       600            500             700   

   actual_Price  
0           500  
1           300  
2           500  

答案 2 :(得分:1)

使用np.select

conditions = [df['Region'].eq(reg) for reg in df['Region'].unique()]
choices = [df[f'{reg} Price'] for reg in df['Region'].unique()]
df['actual_price'] = np.select(conditions, choices)

结果:

# print(df)
   ID Supplier    Region  Av Price  Eastern Price  Southern Price  actual_price
0   1      EDF   Eastern       400            500             300           500
1   2      EDF  Southern       200            100             300           300
2   3   NPower   Eastern       600            500             700           500