Я ищу способ объединить в группы и применить, как это (см. Код ниже для конкретного примера):
df.groupby("a").apply(func_1).groupby("b").apply(func_2)
Я думаю, это не сработает, потому что группа должна принятьвведите фрейм данных, что не всегда имеет место для 2-й группы выше (можно взять серию ввода, см. пример).Решением может быть использование первого применения, которое выводит результат func_1 плюс исходный фрейм данных, но я не нашел, как это сделать.
Я ищу общий обходной путь, а не просто обходной путь для этого конкретного примера.
Пример. Допустим, я хочу вычислить область под бордюром a для каждой группы в b, а затем вычислить сумму этих областей для каждой группы в c.
df=pd.DataFrame({"a":np.arange(8),"b":np.repeat(np.arange(4),2),
"c":np.repeat(np.arange(2),4)})
df
a b c
0 0 0 0
1 1 0 0
2 2 1 0
3 3 1 0
4 4 2 1
5 5 2 1
6 6 3 1
7 7 3 1
df.groupby("b").apply(lambda x: trapz(x["a"])).groupby("c").apply(sum)
Traceback (most recent call last):
[...]
KeyError: 'c'
#Expected output
c
0 3.0
1 11.0
#I know that this code works, but I would like to avoid to modify
#my dataframe :
df["result"]=list(df
.groupby("b").apply(lambda x: trapz(x["a"]))
.repeat(df.groupby("b").size()))
df.groupby("b").first().groupby("c").result.sum()
Любая помощь с благодарностью!