J'en ai deux DataFrames, comme suit:

df1 = 


 name1 name2  name3   ....    nameXXX 
  5.1   1.2    1.1    ...      223.2
  3.22  1.34   1.5    ...      213.2
  4.3   1.32   1.23   ...      523.2
  5.2   1.1    1.543  ...      223.2

df2=

name1     0.2
name2     0.1
name3     0.43
...       ...
nameXXX   0.21

Ce dont j'ai besoin :

Df3 =

 name1       name2         name3     ...         nameXXX 
5.1 * 0.2   1.2 * 0.1    1.1 * 0.43  ...      223.2 *  0.21
3.22* 0.2   1.34* 0.1    1.5 * 0.43  ...      213.2 * 0.21
4.3 * 0.2   1.32* 0.1    1.2 * 0.43  ...      523.2 * 0.21
5.2 * 0.2   1.1 * 0.1    1.54* 0.43  ...      223.2 *  0.21
  • les name sont les en-têtes de colonne

  • Fondamentalement, je veux multiplier chaque colonne de df1 par le nombre présent dans df2 qui se trouve dans la même ligne de l'en-tête de colonne de df1

J'ai vu les questions suivantes mais je n'ai pas trouvé la solution à mon problème:

1) Comment sélectionner des lignes à partir d'un DataFrame basé sur les valeurs de colonne?

2) Pandas: multiplication par paires de colonnes en fonction du nom de la colonne

3) Multiplier les colonnes d'un dataframe en obtenant les noms de colonne à partir d'une liste

4) pandas: sélectionnez les colonnes dataframe en fonction des colonnes d'un autre dataframe

2
khouzam 4 juin 2020 à 23:52

3 réponses

Meilleure réponse

Si la colonne name est votre index, vous pouvez simplement faire

df1.mul(df2.iloc[:,0], axis='columns')

S'il s'agit d'une colonne normale, vous pouvez la définir comme index:

df1.mul(df2.set_index(0).iloc[:,0], axis='columns')

Production:

   name1  name2    name3  nameXXX
0  1.020  0.120  0.47300   46.872
1  0.644  0.134  0.64500   44.772
2  0.860  0.132  0.52890  109.872
3  1.040  0.110  0.66349   46.872
2
Quang Hoang 4 juin 2020 à 20:59

Je pense que ce dont vous avez besoin est de mettre à jour la colonne, essentiellement si vous avez le même nombre de colonnes que de lignes dans votre autre df, vous pouvez essayer:

Cols = df1.colonnes pour i en cols: df1 [i] = df1 [i] * df2.loc [i] .values

Saisie depuis le téléphone désolé pour le formatage

0
Celius Stingher 4 juin 2020 à 21:00

Faisons-le

df1=df1.mul(df2,axis=1)
1
YOBEN_S 4 juin 2020 à 20:58