【问题标题】:How to group a Series by values in pandas?如何按熊猫中的值对系列进行分组?
【发布时间】:2016-02-02 16:38:45
【问题描述】:

我目前有一个 dtype Timestamp 的 pandas Series,我想按日期对它进行分组(并且每个组中有很多行不同的时间)。

看起来很明显的方法类似于

grouped = s.groupby(lambda x: x.date())

但是,pandas 的 groupby 按其索引对 Series 进行分组。如何改为按值分组?

【问题讨论】:

标签: python pandas group-by series


【解决方案1】:
grouped = s.groupby(s)

或者:

grouped = s.groupby(lambda x: s[x])

【讨论】:

  • 是我,还是s.groupby()不起作用有点可笑?
  • 你说得对,Python 并不是为了在数据科学中进行分组而发明的 XD
  • 对于ts.cumsum().groupby(ts.cumsum()).count(),最好有链式方法,否则我必须计算两次没有变量
【解决方案2】:

三种方法:

数据帧:pd.groupby(['column']).size()

系列:sel.groupby(sel).size()

系列到 DataFrame:

pd.DataFrame( sel, columns=['column']).groupby(['column']).size()

【讨论】:

    【解决方案3】:

    对于其他想要内联执行此操作而不添加 lambda(这往往会降低性能)的人:

    s.to_frame(0).groupby(0)[0]
    

    【讨论】:

      【解决方案4】:

      您应该将其转换为 DataFrame,然后添加一个 date() 列。您可以在 DataFrame 上使用日期列进行分组。

      df = pandas.DataFrame(s, columns=["datetime"])
      df["date"] = df["datetime"].apply(lambda x: x.date())
      df.groupby("date")
      

      然后“日期”成为您的索引。您必须这样做,因为最终的分组对象需要一个索引,因此您可以执行 select a group 之类的操作。

      【讨论】:

        【解决方案5】:

        要添加另一个建议,我经常使用以下内容,因为它使用简单的逻辑:

        pd.Series(index=s.values).groupby(level=0)
        

        【讨论】:

        • 这适用于索引值,而不是值本身。您将获得共享共同索引值的组(例如,如果那是您的索引,则为同一日期)。
        • 更仔细地看一下,或者尝试一下,你会发现它对值本身起作用,因为我做了 index=s.values。如果我做了pd.Series(s.values).groupby(level=0),你会是对的
        • 是的,我又看了一遍,第一次看错了,对此我深表歉意。
        猜你喜欢
        • 2016-07-07
        • 2022-12-12
        • 2019-06-29
        • 1970-01-01
        • 2013-10-09
        • 2017-04-09
        • 2015-11-15
        • 1970-01-01
        • 2022-11-30
        相关资源
        最近更新 更多