Попробуйте следующий код:
Начните с определения функции, которая будет применяться к каждой группе:
def dv(tbl):
return tbl.divide(df2.values, axis='columns')
df2
преобразуется в базовый values
для "освобождения"
от выравнивания индекса.
Затем мы читаем количество строк в df2 (размер группы
в группировке df ):
len2 = len(df2.index)
Тогда фактическое деление можно выполнить с помощью одной инструкции:
df.groupby(np.arange(len(df.index)) // len2).apply(dv)
np.arange(len(df.index)) // len2
обеспечивает деление df
на
группы, содержащие столько же строк, сколько и df2
.
Для каждой группы применяется функция dv
(определена выше).
Для целей тестирования я создал первый DataFrame ( df ) как:
0 1
0 10.0 11.0
1 12.0 13.0
2 14.0 15.0
3 16.0 17.0
4 18.0 19.0
5 20.0 21.0
6 22.0 23.0
7 24.0 25.0
и второй ( df2 ) как:
0 1
0 2.0 2.5
1 3.0 3.5
Результат был:
0 1
0 5.000000 4.400000
1 4.000000 3.714286
2 7.000000 6.000000
3 5.333333 4.857143
4 9.000000 7.600000
5 6.666667 6.000000
6 11.000000 9.200000
7 8.000000 7.142857
Конечно, вышеуказанный код был для деления.
Если вы хотите умножить, то определите функцию:
def ml(tbl):
return tbl.multiply(df2.values, axis='columns')
и примените его, позвонив:
df.groupby(np.arange(len(df.index)) // len2).apply(ml)