如何在熊猫数据框中获得具有部分和(由两列分组)的列

时间:2019-08-08 17:38:19

标签: python pandas pivot aggregate

我有一个包含以下列的表格:

    date       Product  category     units     xx_col       ..
0   2017-02-11  Books   heavy       2.          11.     
1   2017-02-11  Books   medium      1.          22.
2   2017-02-11  Books   light       1.          11.
3   2017-02-11  DVD     heavy       3.          11.
4   2017-02-11  DVD     medium      2.          4170.775    
5   2017-02-11  DVD     light       2.          4170.775    

现在,我想再创建两个列,每个日期的给定产品(所有三个类别)的单位总和,然后是分数。如下所示。还有其他一些列xx_col,我想保留在表中(我在第二张表中没有提及,但应该在该表中)。

    date       Product  category     units     unit_tot   unit_frac ..  
0   2017-02-11  Books   heavy       2.          4.        .5
1   2017-02-11  Books   medium      1.          4         .25
2   2017-02-11  Books   light       1.          4         .25
3   2017-02-11  DVD     heavy       3.          10        .3
4   2017-02-11  DVD     medium      2.          10        .2
5   2017-02-11  DVD     light       5.          10        .5

unit_tot:total_units-给定产品在三个(h,m,l)类别(2 + 1 + 1 = 4)内给定日期的总和。
unit_frac:unit / unit_tot 我不仅希望这些都为unit_tot或unit_frac,而且我想保持此表不变。我可以得到两个不同的pivot_tables,但是我想看看是否有添加这两个列的简便方法。

1 个答案:

答案 0 :(得分:1)

IIUC,只需要transform

df['unit_tot'] = df.groupby(['date', 'Product']).units.transform('sum')

然后将两列均分以获得分数

df['unit_frac'] = df['units']/df['unit_tot']