熊猫:按日期分组和另一个变量的中位数

时间:2016-01-08 15:40:47

标签: python pandas

这是我的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

4 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:1)

我会这样做:

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

您首先将日期时间列替换为日期。 然后执行groupby + agg操作。

答案 2 :(得分:1)

通过和.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

答案 3 :(得分:0)

我会这样做,因为您可以同时在多个列上进行多个聚合(例如中位数,均值,最小值,最大值等):

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