【问题标题】:How do you get total sum of a column for a specified date?您如何获得指定日期的列的总和?
【发布时间】:2019-09-20 16:11:41
【问题描述】:

我有一个索引列是日期的地方。其他列是特定日期每种产品的总销售额。我需要获取 2010 年每一列的总销售额。

我知道如何获取一列的总和,但在获取特定数据/时间范围的总和时遇到问题。

索引列上的日期格式如下2007-09-22

【问题讨论】:

  • 请添加您到目前为止为上述任务完成的代码sn-p
  • 你能添加一些数据样本和预期输出吗?随意更改rng = pd.date_range('2018-04-03', periods=10, freq='4M') df = pd.DataFrame({'Product 1': range(10), 'Product 2': range(1, 11)}, rng)

标签: python pandas jupyter-notebook


【解决方案1】:

如果索引是日期时间索引,您可以非常灵活地使用它。 如果使用数据框(由@jezrael 提供),您可以执行以下操作。

df.groupby(df.index.month).sum()

输出

    Product 1   Product 2
4   18          22
8   12          15
12  15          18

或者

df.groupby(df.index.year).sum()

输出

       Product 1    Product 2
2018    3           6
2019    12          15
2020    21          24
2021    9           10

【讨论】:

    【解决方案2】:

    partial string indexingsum 一起使用:

    rng = pd.date_range('2018-04-03', periods=10, freq='4M')
    df = pd.DataFrame({'Product 1': range(10), 'Product 2': range(1, 11)}, rng)  
    print (df)
                Product 1  Product 2
    2018-04-30          0          1
    2018-08-31          1          2
    2018-12-31          2          3
    2019-04-30          3          4
    2019-08-31          4          5
    2019-12-31          5          6
    2020-04-30          6          7
    2020-08-31          7          8
    2020-12-31          8          9
    2021-04-30          9         10
    

    print (df['2020'])
                Product 1  Product 2
    2020-04-30          6          7
    2020-08-31          7          8
    2020-12-31          8          9
    

    如果需要每行总和:

    print (df['2020'].sum(axis=1))
    2020-04-30    13
    2020-08-31    15
    2020-12-31    17
    Freq: 4M, dtype: int64
    

    如果需要每列总和:

    print (df['2020'].sum())
    Product 1    21
    Product 2    24
    dtype: int64
    

    【讨论】:

      【解决方案3】:

      一个简单的 groupby 可以用于聚合。如果您想使用多列进行聚合,请在 documentation 中查找使用 pandas 的 groupby。

      import pandas as pd
      
      data = {'Date': ['2007-09-22', '2007-09-23','2007-09-22'], 'Product 1': [1,2,3], 'Product 2': [4,5,6]}
      df = pd.DataFrame(data, columns = ['Date','Product 1','Product 2'])
      
      df.groupby('Date').sum()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        相关资源
        最近更新 更多