1
votes

Comment obtenir les valeurs d'une colonne en fonction d'une autre colonne à l'aide de valeurs de correspondance spécifiques

J'ai 5 colonnes contenant [Voltage, Bus, Load, load_Values, transmission, transmission_Values]. tous les noms de colonnes avec Valeurs contiennent une valeur numérique basée sur leur valeur correspondante. Les fichiers csv ressemblent à ceux ci-dessous

total=df[df['load']=='load(1)']['load_Values']
next_total= df[df['transmission']=='transmission['total']']['transmission_Values']
v_total= df[df['Voltage']=='Voltage(5)']['Voltage_Values']

Je dois récupérer la valeur de Bus en fonction de la transmission et de la charge. par exemple Pour obtenir la valeur du bus. Tout d'abord, je dois récupérer la valeur de transmission (2) qui est 3. Maintenant, sur la base de cette valeur, je dois obtenir la valeur de load qui est load (3) = 5.Suivant, Sur la base de cette valeur, je dois obtenir la valeur de Voltage (5) qui est 3.

J'ai essayé d'obtenir la valeur d'une seule colonne en fonction de la valeur de leur colonne correspondante.

Voltage     Bus    Load   load_Values   transmission    transmission_Values
Voltage(1)  2      load(1)   3          transmission(1)      2
Voltage(2)  2      load(2)   4          transmission(2)      3
Voltage(5)  3      load(3)   5          transmission(3)       5

Comment obtenir toutes ces valeurs automatiquement. Par exemple, si j'ai 1100 valeurs dans chaque colonne, comment je peux récupérer toutes les valeurs pour 1100 dans ces colonnes.

Voici à quoi ressemble l'ensemble de données Donc, pour obtenir la valeur de VRES_LD qui est une nouvelle colonne. Pour cela, je dois rechercher la colonne I__ND_LD qui a la valeur I__ND_LD (1) et la valeur correspondante stockée dans I__ND_LD_Values ​​qui est 10. Une fois que j'obtiens la valeur 10 maintenant basée sur cela, je dois rechercher la colonne I__BS_ND qui a I__BS__ND (10) et sa valeur est 5,0 dans I__BS_ND_Values. Sur la base de cette valeur, je dois trouver la valeur de V_BS (5) qui est 0,986009. Maintenant, cette valeur doit être stockée dans la nouvelle colonne VRES_LD. S'il vous plaît laissez-moi savoir si vous l'obtenez maintenant.


1 commentaires

Jetez-y un œil maintenant! J'ai changé le nom de la colonne


3 Réponses :


0
votes

Si je comprends bien, vous devriez pouvoir créer des tables clé / valeur et utiliser merge . L'étape vers la tension est un peu floue, mais l'idée de base ci-dessous devrait fonctionner, je pense:

   bus  transmission  transmission_values  load  load_values
0    2             2                    3   3.0          5.0
1    2             2                    3   3.0          5.0
2    3             3                    5   NaN          NaN

résultant en:

df = pd.DataFrame({'voltage': {0: 'Voltage(1)', 1: 'Voltage(2)', 2: 'Voltage(5)'},
 'bus': {0: 2, 1: 2, 2: 3},
 'load': {0: 'load(1)', 1: 'load(2)', 2: 'load(3)'},
 'load_values': {0: 3, 1: 4, 2: 5},
 'transmission': {0: 'transmission(1)',
  1: 'transmission(2)',
  2: 'transmission(3)'},
 'transmission_values': {0: 2, 1: 3, 2: 5}})

load = df[['load', 'load_values']].copy()
trans = df[['transmission','transmission_values']].copy()
load['load'] = load['load'].str.extract('(\d)').astype(int)
trans['transmission'] = trans['transmission'].str.extract('(\d)').astype(int)

(df[['bus']].merge(trans, how='left', left_on='bus', right_on='transmission')
            .merge(load, how='left', left_on='transmission_values', right_on='load'))


1 commentaires

Nous avons des milliers de valeurs dans chaque colonne et chaque nom de colonne est unique avec une valeur différente et je dois obtenir la valeur particulière de la tension en fonction du nom de la transmission et du nom de la charge avec leurs valeurs. J'ai des problèmes avec pour récupérer la valeur particulière de la colonne avec son nom. par exemple. Comment je vais écrire la condition de transmission (2) pour obtenir la valeur 3, la prochaine fois, je devrai peut-être récupérer la valeur de transmission (1100) qui a une certaine valeur. Faites-moi savoir si vous comprenez



0
votes

Je pense que vous devez faire 3 choses.

1.Vous devez mettre un nombre dans une chaîne. Vous le faites comme ceci:

voltage_value= df[df['Voltage'].isin(load_values_to_fetch )]['Voltage_Values'].values

2. Disons que les valeurs que vous devez récupérer sont:

transmission_values = [2,5,20]
You than need to fetch those load values:
load_values_to_fetch = [f"transmission({n})" for n in transmission_values]
#output
[transmission(2),transmission(5),transmission(20)]

3. Obtenez toutes les valeurs de tension du df. Utilisez la méthode .isin ():

n_cookies = 3
f"I want {n_cookies} cookies"
#Output
I want 3 cookies

J'espère avoir bien compris le problème. Essayez de nous le faire savoir car je ne peux pas essayer le code sans données


17 commentaires

[Voici à quoi ressemble l'ensemble de données] [1] [1]: i.stack.imgur.com /wWvVq.png Donc pour obtenir la valeur de VRES_LD qui est une nouvelle colonne. Pour cela, je dois rechercher la colonne I__ND_LD qui a la valeur I__ND_LD (1) et la valeur correspondante stockée dans I__ND_LD_Values ​​qui est 10. Une fois que j'obtiens la valeur 10 maintenant basée sur cela, je dois rechercher la colonne I__BS_ND qui a I__BS__ND (10) et sa valeur est 5,0 dans I__BS_ND_Values. Sur la base de cette valeur, je dois trouver la valeur de V_BS (5) qui est 0,986009. ces valeurs doivent être stockées dans la nouvelle colonne VRES_LD. S'il vous plaît laissez-moi savoir si vous l'obtenez maintenant.


Je pense que votre exemple est clair. Je n'ai tout simplement pas les données pour essayer ma solution. Je vais jeter un œil à votre lien demain car dans mon fuseau horaire il se fait du retard.


Sûr ! pas de soucis Si vous le souhaitez, je peux également vous envoyer un échantillon de données


Bien sûr, envoyez-le. Plus facile de cette façon


Avez-vous eu la chance de jeter un coup d'œil


Je peux le faire maintenant


Désolé mais je n'ai pas la permission d'accéder au fichier


C'est le code que j'ai fait pour obtenir la première valeur


docs.google.com/spreads


veuillez ouvrir le lien ci-dessus pour accéder à la feuille. Merci


Pouvez-vous accéder au lien ci-dessus maintenant? s'il vous plaît, faites-moi savoir


Oui, je vois ça. Il y a beaucoup de choses et je dois les charger sur les pandas, donc ce ne sera pas une réponse rapide


df1 = df [['V_BS', 'V_BS_Values', 'I__BS_ND', 'I__BS_ND_Values', 'I__ND‌ _LD', 'I__ND_LD_Value‌ s']] Load_Value = f "^ I__ND_LD (1)" (df ​​[df ['I__ND_LD'] == Load_Value] ['I__ND_LD_Va‌ lues']. item ()) bus_name = f "^ I__BS_ND ({load_value})" bus_value = round (df [df ['I__BS_ND'] = = bus_name] ['I__BS_ND_Values']. item (‌)) voltage_bus_value = f "^ V_BS ({bus_value})" voltage_value = df [df ['V_BS'] == voltage_bus_value] ['V_BS_Values‌'] .item ( ) voltage_value C'est le code que j'ai utilisé pour obtenir la première valeur de V_BS. Regarde !


De même, je veux obtenir toute la valeur dans la colonne différente par exemple VRES_LD.


D'accord. Chargé et utilisé votre code. Travaux. Maintenant, vous voulez mettre 10, 5 et 0.9897 dans une nouvelle colonne nommée VRES_LD? A quel index? 0,1,2?


J'ai généralisé votre code afin que vous puissiez l'utiliser pour autant de valeurs que vous le souhaitez. J'ai ajouté une nouvelle réponse car la première peut encore avoir un sens pour les autres utilisateurs.


Je veux juste mettre 0,9897 dans une nouvelle colonne car c'est la valeur dont j'ai besoin



0
votes

J'ai généralisé votre solution afin que vous puissiez travailler avec autant de valeurs que vous le souhaitez.

J'ai changé le nom "Load_Value" en "load_value_name" pour éviter toute confusion car il y a une variable nommée "load_value" en minuscules. p>

Vous pouvez commencer avec autant de valeurs que vous le souhaitez; dans notre exemple, nous commençons par "1":

voltage_bus_value = [f"^V_BS({n})" for n in bus_values]
voltage_values = df[df['V_BS'].isin(voltage_names)]['V_BS_Values'].values
#output
array([0.98974069])

Ensuite, nous récupérons toutes les valeurs:

bus_names = [f"^I__BS_ND({n})" for n in load_values]
bus_values = df[df['I__BS_ND'].isin(bus_names)]['I__BS_ND_Values'].values.astype(np.int)
#output
array([5])

obtenons le noms de bus:

load_values=df[df['I__ND_LD'].isin(load_names)]['I__ND_LD_Values'].values.astype(np.int)
#output: again, more if needed
array([10])

Et enfin tension:

start_values = [1]
load_value_name = [f"^I__ND_LD({n})" for n in start_values]
#Output: but you'll have more than one if needed
['^I__ND_LD(1)']

Notes: Au lieu d'arrondir, j'ai baissé en int; et .isin () recherche toutes les occurrences afin que vous puissiez récupérer toutes les valeurs.


10 commentaires

J'ai une question au lieu d'écrire load_names, bus_names, voltage_names que dois-je écrire parce que cela montre une erreur que ceux-ci ne sont pas définis. et pour stocker Voltage_value, dois-je définir des tableaux pour stocker toute la valeur. Deuxièmement, si je dois faire défiler toutes les valeurs de la colonne automatiquement, disons qu'il comptera les valeurs d'index qui est de 1100, puis le fera automatiquement pour 1100 valeurs. Merci beaucoup monsieur


Eh bien, ils sont définis. Donc vous avez soit orthographié de différentes manières (notez qu'il y a un "s" à la fin) soit que je les ai simplement mal orthographiés sur cette page. Ou si vous utilisez un bloc-notes, vous devez réexécuter la cellule dans laquelle vous avez défini la variable.


Eh bien, pour stocker la valeur, vous devez spécifier les indices ou une plage d'indices. Définissez d'abord les colonnes: df ["column_for_storage"] = np.nan et ensuite stockez mon_array comme ceci df [: len (my_array), "column_for_storage"] = my_array


'df [' VRES_LD '] = np.nan df [: len (voltage_values), "VRES_LD"] = voltage_values' l'erreur ci-dessus j'ai eu "La longueur des valeurs ne correspond pas à la longueur de l'index". Monsieur, une autre question si j'ai besoin de calculer pour 11000 valeurs de colonne, comment puis-je le faire car à chaque fois start_values ​​= 1.


Oui désolé, vous devez utiliser iloc, alors remplacez ceci: df [: len (voltage_values), "VRES_LD"] = voltage_values ​​par ceci: df.iloc [: len (voltage_values), df.columns == "VRES_LD"] = valeurs voltage_‌


À propos de votre deuxième question, vous pouvez définir autant de valeurs de départ que vous le souhaitez. start_values ​​= [1,2,3,10,15] par exemple


Monsieur, j'ai une question, si vous êtes libre, pourriez-vous s'il vous plaît m'aider?


Postez votre question mais j'aurai à peine le temps aujourd'hui


J'ai une question. Pour calculer voltage_values ​​dans le tableau, je n'obtiens pas la liste complète. Pour calculer toutes les valeurs, je n'obtiens pas toutes les valeurs en utilisant cette méthode dans un tableau


Bonjour Monsieur, Pourriez-vous jeter un œil à ce post stackoverflow.com/ questions / 57304478 /… . laissez-moi savoir votre commentaire / suggestion comment puis-je résoudre ce problème