【问题标题】:How to use pandas Grouper on multiple keys?如何在多个键上使用 pandas Grouper?
【发布时间】:2018-09-05 14:45:01
【问题描述】:

我需要按日期时间列和另一个 str(object) 列对数据框进行分组转换,以按组应用函数并将结果分配给组的每个行成员。我了解groupby workflow,但不能同时为这两种情况创建pandas.Grouper。因此:

如何在多个列上使用pandas.Grouper

【问题讨论】:

    标签: datetime pandas-groupby


    【解决方案1】:

    使用DataFrame.groupbypandas.Grouper 列表作为by 参数,如下所示:

    df['result'] = df.groupby([
                     pd.Grouper('dt', freq='D'),
                     pd.Grouper('other_column')
                   ]).transform(foo)
    

    【讨论】:

      【解决方案2】:

      如果您的第二列是非日期时间系列,您可以将其与日期时间列分组,如下所示:

      df['res'] = df.groupby([
                       pd.Grouper('dt', freq='D'),
                       'other_column'
                     ]).transform(foo)
      

      请注意,在这种情况下,您不必为第二列使用pd.Grouper,因为它是字符串对象而不是时间对象。 pd.Grouper 仅与日期时间列兼容。

      【讨论】:

      • 是“您不必”还是“仅兼容”?你能澄清一下吗?前者意味着当前接受的答案是有效的,后者意味着当前接受的答案是无效的。
      • 我尝试了接受的答案,但它对我不起作用,因为就我而言(以及此处发布的问题的情况),“other_column”不是日期时间序列。相反,它是一个“字符串”系列,正如这里所问的那样。 pd.Grouper 仅接受日期时间序列。如果你给它其他东西,比如一个字符串系列,它就不起作用并抛出异常。希望澄清。
      • 感谢您的评论。这很奇怪,因为从文档 (pandas.pydata.org/docs/reference/api/pandas.Grouper.html) 看来,Grouper 似乎也可以使用该列的名称。
      猜你喜欢
      • 2020-04-03
      • 2020-02-06
      • 2021-01-22
      • 2020-12-18
      • 2020-01-20
      • 2018-10-11
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多