Вычислить значение внутри группы - PullRequest
1 голос
/ 19 июня 2020

Предположим, что у меня есть Pandas DataFrame с именем df:

    Origin Dest T   R
0      N    N  100  3
1      N    A    2  6
2      A    B  356  7
3      A    B  789  8
4      B    N  999  9
5      B    A  345  2
6      N    A  456  3

Я хочу создать DataFrame, который для каждой группы Origin выполняет следующие вычисления:

Сумма значений в столбце «T» затем разделите на сумму значений в «R» для каждой группы. Я хочу увидеть этот результат в матричной форме origin_dest.

Я пытаюсь следовать, но не работает.

Matrix_Origin =df.pivot_table(values=['T','R'], index='Origin', columns ='Dest', fill_value=0, aggfunc=[lambda x: df['T'].sum()/df['R'].sum() ])

Это то, что я хочу получить:

Origin   N     A     B
N     33.33  50.88   0
A      0     0    76.33
B      111  172.5   0

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 19 июня 2020

Комбинация groupby с unstack может дать желаемый результат:

res = df.groupby(["Origin", "Dest"]).sum().unstack()


#divide column T with column R
outcome = (
    res["T"]
    .div(res["R"])
    .reindex(index=["N", "A", "B"], columns=["N", "A", "B"])
    .fillna(0)
     #optional
    .round(2)
)

outcome





  Dest      N     A      B
Origin          
   N    33.33   50.89   0.00
   A    0.00    0.00    76.33
   B    111.00  172.50  0.00
...