如何基于使用熊猫的另一列[SoldDate]查找特定列[Model]的计数?

时间:2019-06-24 21:00:54

标签: python pandas

我有一个包含3列的数据框,例如SoldDate,Model和TotalSoldCount。如何创建一个新列“ CountSoldbyMonth”,该列将给出每月销售的许多型号的计数?给出了描述问题的屏幕截图。 “ CountSoldbyMonth”应始终小于“ TotalSoldCount”。

我是Python的新手。 enter image description here

Date        Model  TotalSoldCount
Jan 19        A          4
Jan 19        A          4
Jan 19        A          4
Jan 19        B          6
Jan 19        C          2
Jan 19        C          2
Feb 19        A          4
Feb 19        B          6
Feb 19        B          6
Feb 19        B          6
Mar 19        B          6
Mar 19        B          6

新的df应该看起来像这样。

Date      Model     TotalSoldCount     CountSoldbyMonth
Jan 19     A               4                    3
Jan 19     A               4                    3
Jan 19     A               4                    3
Jan 19     B               6                    1
Jan 19     C               2                    2
Jan 19     C               2                    2
Feb 19     A               4                    1
Feb 19     B               6                    3
Feb 19     B               6                    3
Feb 19     B               6                    3
Mar 19     B               6                    2
Mar 19     B               6                    2

我尝试做

  

df ['CountSoldbyMonth'] = df.groupby(['date','model'])。totalsoldcount.transform('sum')

但是它产生了一个不同的值。

2 个答案:

答案 0 :(得分:0)

如果提供让用户试验的代码,则更容易获得帮助。在这种情况下,我认为采用您的数据框(df)并执行以下操作应该有效:

df['CountSoldbyMonth'] = df.groupby(['Date','Model'])['TotalSoldCount'].transform('sum')

答案 1 :(得分:0)

假设您具有以下数据集:

      date model  totalsoldcount
0   Jan 19     A             110
1   Jan 19     A             110
2   Jan 19     A             110
3   Jan 19     B              50
4   Jan 19     C              70
5   Jan 19     C              70
6   Feb 19     A             110
7   Feb 19     B              50
8   Feb 19     B              50
9   Feb 19     B              50
10  Mar 19     B              50
11  Mar 19     B              50

您想定义一个新列countsoldbymonth。您可以groupby datemodel列,然后sum totalsoldcount进行转换,然后创建新列:

s['countsoldbymonth'] = s.groupby([
    'date',
    'model'
]).totalsoldcount.transform('sum')

print(s)

      date model  totalsoldcount  countsoldbymonth
0   Jan 19     A             110               330
1   Jan 19     A             110               330
2   Jan 19     A             110               330
3   Jan 19     B              50                50
4   Jan 19     C              70               140
5   Jan 19     C              70               140
6   Feb 19     A             110               110
7   Feb 19     B              50               150
8   Feb 19     B              50               150
9   Feb 19     B              50               150
10  Mar 19     B              50               100
11  Mar 19     B              50               100

或者,如果您只想查看总数而不创建新列,则可以使用sum代替transform,如下所示:

print(s.groupby([
    'date',
    'model'
]).totalsoldcount.sum())

date    model
Feb 19  A        110
        B        150
Jan 19  A        330
        B         50
        C        140
Mar 19  B        100

编辑

如果您只想知道当月完成了多少笔交易,可以执行相同的groupby,但可以使用sum代替count

df['CountSoldByMonth'] = df.groupby([
    'Date',
    'Model'
]).TotalSoldCount.transform('count')

print(df)

      Date Model  TotalSoldCount  CountSoldByMonth
0   Jan 19     A               4                 3
1   Jan 19     A               4                 3
2   Jan 19     A               4                 3
3   Jan 19     B               6                 1
4   Jan 19     C               2                 2
5   Jan 19     C               2                 2
6   Feb 19     A               4                 1
7   Feb 19     B               6                 3
8   Feb 19     B               6                 3
9   Feb 19     B               6                 3
10  Mar 19     B               6                 2
11  Mar 19     B               6                 2