【问题标题】:Pandas: Group by date and the median of another variable熊猫:按日期和另一个变量的中位数分组
【发布时间】:2016-01-08 15:40:46
【问题描述】:

这是我的 DataFrame 的演示示例。完整的 DataFrame 有多个附加变量,涵盖 6 个月的数据。

sentiment     date
1             2015-05-26 18:58:44
0.9           2015-05-26 19:57:31
0.7           2015-05-26 18:58:24
0.4           2015-05-27 19:17:34
0.6           2015-05-27 18:46:12
0.5           2015-05-27 13:32:24
1             2015-05-28 19:27:31
0.7           2015-05-28 18:58:44
0.2           2015-05-28 19:47:34

我想仅按 date 列的日期对 DataFrame 进行分组,但同时聚合 sentiment 列的中位数。

我用groupbydt 访问器和timegrouper 尝试的一切都失败了。

我想返回一个 pandas DataFrame 而不是 GroupBy 对象。

日期栏为M8[ns]

情感专栏float64

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    幸运的是,您的问题中列出了您需要的工具。

    In [61]: df.groupby(df.date.dt.date)[['sentiment']].median()
    Out[61]:
                sentiment
    2015-05-26        0.9
    2015-05-27        0.5
    2015-05-28        0.7
    

    【讨论】:

      【解决方案2】:

      我会这样做:

      df['date'] = df['date'].apply(lambda x : x.date())
      df = df.groupby('date').agg({'sentiment':np.median}).reset_index()
      

      您首先将 datetime 列替换为日期。 然后进行groupby+agg操作。

      【讨论】:

        【解决方案3】:

        您可以使用一个 group by 和 .agg() 函数获取任意数量的指标
        1) 创建新列提取日期。
        2) 使用 groupy by 并应用 numpy.median,numpy.mean 等

        import pandas as pd
        x = [[1,'2015-05-26 18:58:44'],
             [0.9,'2015-05-26 19:57:31']]
        t = pd.DataFrame(x,columns = ['a','b'])
        t.b = pd.to_datetime(t['b'])
        t['datex'] = t['b'].dt.date
        
        
        t.groupby(['datex']).agg({
            'a': np.median
        })
        

        输出 -

        datex   
        2015-05-26  0.95
        

        【讨论】:

          【解决方案4】:

          我会这样做,因为您可以同时对多个列进行多个聚合(如中值、平均值、最小值、最大值等):

          df.groupby(df.date.dt.date).agg({'sentiment': ['median']})
          

          【讨论】:

            猜你喜欢
            • 2013-10-26
            • 2020-10-22
            • 2020-07-10
            • 1970-01-01
            • 1970-01-01
            • 2021-11-19
            • 2021-11-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多