这是我的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
列的中位数。
我使用groupby
,dt
访问者和timegrouper
尝试的所有内容都失败了。
我想返回一个pandas DataFrame而不是GroupBy对象。
日期列为M8[ns]
情绪栏float64
答案 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']})