Итак, допустим, у меня есть фрейм данных, который создан следующим образом и имеет 3 продукта A, B, C
df = pd.DataFrame({'type' : ['A','A','B','B','C','C'], 'x' : [1,2,3,4,5,6]})
, которые вы можете распечатать и увидеть, как показано ниже
type x
0 A 1
1 A 2
2 B 3
3 B 4
4 C 5
5 C 6
Теперь я создаю функцию с именем f, которая возвращает кортеж
def f(x):
return x*2, x*3, x*4
И я применяю это к кадру данных с помощью groupby типа
df.groupby('type').apply(lambda x : f(x.x))
И теперь результат серия из 3 массивов, как показано ниже. Но как мне слить ее обратно в фрейм данных правильно
type
A ([2, 4], [3, 6], [4, 8])
B ([6, 8], [9, 12], [12, 16])
C ([10, 12], [15, 18], [20, 24])
dtype: object
То, что я хочу увидеть, это
type x a b c
A 1 2 3 4
A 2 4 6 8
B 3 6 9 12
B 4 8 12 16
C 5 10 15 20
C 6 12 18 24
РЕДАКТИРОВАНИЕ: Обратите внимание, что я дал функцию f в качестве очень простого примера и похоже, почему я не могу напрямую создать новый столбец с умножением. Но представьте себе более сложную функцию f, которая использует 3 столбца, а затем генерирует кортежи, которые не являются прямым умножением столбцов
Именно поэтому я задал этот вопрос
Реальная рассматриваемая функция - talib.BBANDS