使用 sum 函数从 groupby 数据框中排除日期列

Posted

技术标签:

【中文标题】使用 sum 函数从 groupby 数据框中排除日期列【英文标题】:Exclude date column from groupby dataframe with sum function on it 【发布时间】:2019-06-12 14:54:00 【问题描述】:

我有一个 df,我把它放到另一个数据框中,用 sum 函数,它排除了一些列,但是 date 对于进一步计算很重要

grdf = df.groupby(['Year', 'Month', 'Percentage']).sum()
grdf['Gross Sales'] = grdf['Gross Sales'].astype(float)
grdf['Sum'] = grdf['Gross Sales'].cumsum()

追加、合并、重新索引、掩码、融合、连接、相交、 you_name_it - 我的日期时间栏?


 -                         Net Units  Net Sales  Gross Sales     Sum  Payout
    Year Month Percentage                                                   
    2017 11    70%                 3     147.97       103.58  103.58  103.58
         12    70%                 1      24.99        17.49  121.07   17.49
    2018 1     70%                 2      49.98        34.99  156.06   34.99
         2     70%                 3      74.97        52.48  208.54  104.96
         3     70%                 1      24.99        17.49  226.03   17.49
         4     70%                 1      24.99        17.49  243.52   17.49
         8     88%                 2      89.98        79.18  322.71  114.17
         9     88%                 1      64.99        57.19  379.90   57.19
         10    88%                 3     104.97        92.37  472.27  149.56
         11    88%                 2      79.98        70.38  542.65   70.38
    2019 1     88%                 2      39.98        35.18  577.83  105.56

++++


          Day                     Product Base Price  Net Units  Net Sales  Gross Sales Percentage  Year  Month   Payout     Pay Day
0  2017-11-11         asdasdasdnts     $69.99          1      69.99      48.9930        70%  2017     11        x           x
1  2017-11-13         asdasdasdnts     $69.99          1      69.99      48.9930        70%  2017     11        x           x
2  2017-11-27         asdasdasdnts      $7.99          1       7.99       5.5930        70%  2017     11  103.579  2018-01-11
3  2017-12-06         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2017     12        x           x
4  2018-01-03         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      1        x           x
5  2018-01-17         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      1        x           x
6  2018-02-10         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      2        x           x
7  2018-02-19         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      2        x           x
8  2018-02-28         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      2  104.958  2018-04-14
9  2018-03-04         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      3        x           x
10 2018-04-22         asdasdasdnts     $24.99          1      24.99      17.4930        70%  2018      4        x           x
11 2018-08-01         asdasdasdnts     $24.99          1      24.99      21.9912        88%  2018      8        x           x
12 2018-08-22         asdasdasdial     $64.99          1      64.99      57.1912        88%  2018      8  176.789  2018-10-06
13 2018-09-19         asdasdasdial     $64.99          1      64.99      57.1912        88%  2018      9        x           x
14 2018-10-15         asdasdasdial     $64.99          1      64.99      57.1912        88%  2018     10  114.382  2018-11-29
15 2018-10-23         asdasdasdnts     $24.99          1      24.99      21.9912        88%  2018     10        x           x
16 2018-10-26         asdasdasdock     $14.99          1      14.99      13.1912        88%  2018     10        x           x
17 2018-11-20         asdasdasdial     $64.99          1      64.99      57.1912        88%  2018     11        x           x
18 2018-11-20         asdasdasdock     $14.99          1      14.99      13.1912        88%  2018     11  105.565  2019-01-04
19 2019-01-04         asdasdasdnts     $24.99          1      24.99      21.9912        88%  2019      1        x           x
20 2019-01-04         asdasdasdock     $14.99          1      14.99      13.1912        88%  2019      1        x           x       

我按月分组,所以我的数据被求和,行数 - 不一样

【问题讨论】:

原始数据框是什么样的? 您能添加一个原始数据框的示例吗? @Ghorich - 更新! @Mr_Z - 更新! @jezrael - 不幸的是,我按月分组(所以我的数据被求和),行数 - 不一样 【参考方案1】:

使用聚合:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.aggregate.html

In : df = pd.DataFrame([[1, 2, 3],
                        [4, 5, 6],
                        [1, 5, 7]],
                        columns=['A', 'B', 'C'])                   

In : df
Out: 
   A  B  C
0  1  2  3
1  4  5  6
2  1  5  7

In : df.groupby('A').agg('B':np.sum, 'C':'first')
Out: 
   B  C
A      
1  7  3
4  5  6

因此,您可以决定在每一列上使用哪个操作。您只需说出您对“日期”列的要求(首先可能没问题)。

【讨论】:

'last' - 工作完美!就像我想要的一样,谢谢你^___^

以上是关于使用 sum 函数从 groupby 数据框中排除日期列的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据框中排除特定的行?

在 spark 数据框中的几列上替代 groupBy

熊猫有效地将groupby函数应用于每一列[重复]

Pandas将groupby操作的结果保存为原始数据框中的新列[关闭]

根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列

pandas编写自定义函数计算多个数据列的加和(sum)使用groupby函数和apply函数聚合计算分组内多个数据列的加和