Pandas: Multiplication élémentaire de deux dataframes
Je sais comment le faire élément par élément de multiplication entre deux Pandas dataframes. Cependant, les choses se compliquent lorsque les dimensions des deux dataframes ne sont pas compatibles. Pour l'exemple ci-dessous df * df2
est simple, mais df * df3
est un problème:
df = pd.DataFrame({'col1' : [1.0] * 5,
'col2' : [2.0] * 5,
'col3' : [3.0] * 5 }, index = range(1,6),)
df2 = pd.DataFrame({'col1' : [10.0] * 5,
'col2' : [100.0] * 5,
'col3' : [1000.0] * 5 }, index = range(1,6),)
df3 = pd.DataFrame({'col1' : [0.1] * 5}, index = range(1,6),)
df.mul(df2, 1) # element by element multiplication no problems
df.mul(df3, 1) # df(row*col) is not equal to df3(row*col)
col1 col2 col3
1 0.1 NaN NaN
2 0.1 NaN NaN
3 0.1 NaN NaN
4 0.1 NaN NaN
5 0.1 NaN NaN
Dans la situation ci-dessus, comment puis-je multiplier chaque colonne de df avec df3.col1?
Ma tentative: j'ai essayé de reproduire df3.col1
len(df.columns.values)
fois pour obtenir un dataframe qui est de la même dimension que df
:
df3 = pd.DataFrame([df3.col1 for n in range(len(df.columns.values)) ])
df3
1 2 3 4 5
col1 0.1 0.1 0.1 0.1 0.1
col1 0.1 0.1 0.1 0.1 0.1
col1 0.1 0.1 0.1 0.1 0.1
Mais cela crée un dataframe de dimensions 3 * 5, alors que je suis au bout de 5*3. Je sais que je peux prendre le transposer avec df3.T()
pour obtenir ce dont j'ai besoin, mais je pense que ce n'est pas que le moyen le plus rapide.
source d'informationauteur Rhubarb
Vous devez vous connecter pour publier un commentaire.
Un moyen plus simple de le faire est simplement de multiplier le dataframe dont colnames vous souhaitez conserver avec les valeurs (c'est à dire un tableau numpy) de l'autre, comme suit:
De cette façon, vous n'avez pas à écrire tout ce que new dataframe standard.
Cela fonctionne pour moi:
Ou, lorsque vous voulez soustraire (fracture) au lieu de:
Fonctionne aussi avec un
nan
dans le df (par exemple, si vous appliquez cela à la df:df.iloc[0]['col2'] = np.nan)
Une autre façon est de créer une liste de colonnes et de se joindre à eux:
D'utiliser les Pandas propriétés de radiodiffusion, vous pouvez utiliser
multiplier
.