【问题标题】:Pandas group by date with subcategories and sumsPandas 按日期分组,包含子类别和总和
【发布时间】:2022-02-22 11:51:51
【问题描述】:

我有一个这样的数据框:

     Date         Category1 Cat2   Cat3   Cat4   Value
0    2021-02-02   4310      0      1      0      1082.00
1    2021-02-03   5121      2      0      0      -210.82
2    2021-02-03   4310      0      0      0      238.41
3    2021-02-12   5121      2      2      0      -1489.11
4    2021-02-25   6412      1      0      0      -30.97
5    2021-03-03   5121      1      1      0      -189.91
6    2021-03-09   6412      0      0      0      238.41
7    2021-03-13   5121      0      0      0      -743.08

日期列已转换为日期时间格式,值是浮点数,其他列是字符串。

我正在尝试按月和每个级别的类别对数据框进行分组,例如:

  • 级别 1 = 过滤类别 1 并为每个类别的每个月求和值:

         Date         Category1 Value
    0    2021-02      4310      1320.41
    1    2021-02      5121      -1699.93
    2    2021-02      6412      -30.97
    3    2021-03      5121      -1489.11
    4    2021-03      6412      -932.99
    
  • 级别 2 = 仅过滤类别 2(一个输出数据帧)和类别 1 + 2 的串联(另一个输出数据帧):

         Date         Cat2   Value
    0    2021-02      0      1320.41
    1    2021-02      1      -1699.93
    2    2021-02      2      -30.97
    3    2021-03      0      -504.67
    4    2021-03      1      -189.91
    

    第二次输出:

             Date         Cat1+2    Value
        0    2021-02      43100     1320.41
        1    2021-02      51212     -1699.93
        2    2021-02      64121     -30.97
        3    2021-03      51210     -743.08
        4    2021-03      51211     -189.91
        5    2021-03      64120     238.41
    
  • 第 3 级:仅过滤类别 3 和类别 1+2+3

  • 等等

我可以一次进行一个分组(按日期或按类别),但我不能将它们组合起来。 按日期分组:

df.groupby(df["Date"].dt.year)

按类别分组:

df.groupby('Category1')['Value'].sum()

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以试试这个。

    1. 要按月份分组,可以使用这个例子

      df.groupby(df['Date'].dt.strftime('%B'))['Value'].sum()

      How can I Group By Month from a Date field using Python/Pandas

    2. 按多列分组

      df.groupby(['col5', 'col2'])

      您可以创建一个月份年份列,并使用新列进行分组。

      Pandas DataFrame Groupby two columns and get counts,

      Extracting just Month and Year separately from Pandas Datetime column

    【讨论】:

    • 感谢您的帮助。我不明白的是如何将日期分组(例如您在步骤 1 中提出的那个)与另一个分组(因为步骤 2 仅适用于单个列表中的列名)
    • 是的。我忽略了它。我的错误
    • 但是您可以创建一个只有年份和月份值的新列。然后,您可以按此新月份列和列表中的任何其他列进行分组。这会有帮助吗?
    • 更新了相同的答案。提供了更多类似的,可以用来提取月份和年份。
    • 感谢您的提示!我确实可以创建一个额外的年份和月份,并使用第二个公式对这个新列和另一个类别列进行分组。简单,似乎工作得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2023-03-04
    • 2021-03-08
    • 2021-03-09
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多