Quelqu'un peut-il m'aider, je suis nouveau sur Python alors supportez-moi.

Mes données ressemblent à ceci, mais toutes les informations sur la région sont disponibles. J'essaie de créer une nouvelle colonne «prix réel» qui calcule le prix en fonction de la région. comme pour chaque entrée, j'ai chaque prix pour chaque région. Est-ce possible.

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
1
em456 1 juin 2020 à 17:29

3 réponses

Meilleure réponse

IIUC, vous pouvez faire df.lookup ici après avoir ajouté "Price" aux valeurs de la colonne Region pour faire correspondre les noms de colonne du Price by region:

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  
1
anky 1 juin 2020 à 14:39

Je crois que c'est ce que vous recherchez:

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

Résultat:

enter image description here

1
Roy2012 1 juin 2020 à 14:34

Utilisez, 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)

Résultat:

# 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
1
Shubham Sharma 1 juin 2020 à 16:12