Ich weiß, wie Element-für-Element-Multiplikation zwischen zwei Pandas-Datenrahmen zu tun. Die Dinge werden jedoch komplizierter, wenn die Dimensionen der beiden Datenrahmen nicht kompatibel sind. Zum Beispiel unter df * df2
einfach ist, aber df * df3
ist ein Problem:Pandas: Elementweise Multiplikation von zwei Datenrahmen
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
In der obigen Situation wie kann ich jede Spalte von df mit df3.col1 multiplizieren?
Mein Versuch: Ich versuchte df3.col1
len(df.columns.values)
mal zu replizieren, um einen Datenrahmen zu erhalten, die als df
die gleichen Dimension ist:
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
Aber das schafft eine Datenrahmen von Dimensionen 3 * 5, während ich bin nach 5 * 3. Ich weiß, dass ich die Transponierung mit df3.T()
nehmen kann, um zu bekommen, was ich brauche, aber ich denke, das ist nicht der schnellste Weg.
Danke unutbu. 'pd.DataFrame (df.values * df3.values, Spalten = df.columns, index = df.index)' behält den Index auch, richtig? – Rhubarb
Ja, das stimmt. – unutbu