按条件求和枢轴值 python

Sum pivot value by condition python

我有一个 pandas 数据框,例如:

Id a b c d 
x  1 1 1 01/01/2021
x  1 1 0 01/05/2021
y  1 1 1 02/01/2021
y  1 1 1 02/01/2021

Id a b c d 
x  2 1 1 01/01/2021
y  1 1 1 02/01/2021

当且仅当 d 列中的日期不同时,我想对同一 ID 的 a b 列和 c 列的值求和。事实上,在这些情况下,两次出现的 x 具有不同的日期,因此我可以对这些值求和,而 d 具有相同的值,因此我只是不求和,而是第一次出现。

dat[~dat[["d", "Id"]].duplicated()].groupby("Id", as_index=False).agg(
    {nm: "first" if nm in ["d", "Id"] else "sum" for nm in dat.columns}
)
    Id  a   b   c   d
0   x   2   2   1   01/01/2021
1   y   1   1   1   02/01/2021