Я знаю, как выполнять умножение элементов по элементам между двумя фреймами Pandas. Однако все усложняется, когда размеры двух фреймов несовместимы. Например, ниже df * df2
является простым, но df * df3
является проблемой:
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
В приведенной выше ситуации как я могу умножить каждый столбец df с помощью df3.col1?
Моя попытка: Я попытался реплицировать df3.col1
len(df.columns.values)
раз, чтобы получить фреймворк данных того же размера, что и 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
Но это создает dataframe размеров 3 * 5, тогда как я после 5 * 3. Я знаю, что могу взять транспонирование с помощью df3.T()
, чтобы получить то, что мне нужно, но я думаю, что это не самый быстрый способ.