Я пытаюсь создать новый столбец в кадре данных Pandas на основе двух столбцов в сгруппированном кадре данных.
В частности, я пытаюсь повторить вывод этого кода R:
library(data.table)
df = data.table(a = 1:6,
b = 7:12,
c = c('q', 'q', 'q', 'q', 'w', 'w')
)
df[, ab_weighted := sum(a)/sum(b), by = "c"]
df[, c('c', 'a', 'b', 'ab_weighted')]
Вывод:
До сих пор я пробовал в Python следующее:
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[7,8,9,10,11,12],
'c':['q', 'q', 'q', 'q', 'w', 'w']
})
df.groupby(['c'])['a', 'b'].apply(lambda x: sum(x['a'])/sum(x['b']))
Вывод:
Когда я изменяю apply
в приведенном выше коде transform
Я получаю сообщение об ошибке: TypeError: требуется целое число
Преобразование работает нормально, хотя я использую только один столбец:
import pandas as pd
df = pd.DataFrame({'a':[1,2,3,4,5,6],
'b':[7,8,9,10,11,12],
'c':['q', 'q', 'q', 'q', 'w', 'w']
})
df.groupby(['c'])['a', 'b'].transform(lambda x: sum(x))
Но, очевидно,, это не тот ответ:
Есть ли способ получить результат из моего кода data.table в Pandas без необходимости создавать промежуточныйстолбцы (потому что тогда я мог бы использовать transform
в последнем столбце?
Любая помощь с благодарностью:)