熊猫 - 计算时间戳的平均值

时间:2015-11-09 16:08:50

标签: python-2.7 pandas

我在计算时间戳的平均值方面遇到了麻烦。

我的数据框中有一些带有时间戳的值,我希望将值汇总为单个值,其中包含所有值的总和以及相应时间戳的加权平均值

我的意见是:

         Timestamp        Value
ID      
0   2013-02-03 13:39:00     79
0   2013-02-03 14:03:00     19
1   2013-02-04 11:36:00     2
2   2013-02-04 12:07:00     2
3   2013-02-04 14:04:00     1

我想使用ID索引聚合数据。

我能够使用

对值进行求和
manp_func = {'Value':['sum'] }

new_table =table.groupby(level='ID).agg(manp_func)    

但是,如何找到与值相关的时间戳的加权平均值?

由于

S.A

2 个答案:

答案 0 :(得分:0)

agg = lambda x: (x['Timestamp'].astype('i8') * (x['Value'].astype('f8') / x['Value'].sum())).sum()

new_table = table.groupby(level='ID').apply(agg).astype('i8').astype('datetime64[ns]')

new_table

的输出
ID
0   2013-02-03 13:43:39.183673344
2   2013-02-04 11:51:30.000000000
3   2013-02-04 14:04:00.000000000
dtype: datetime64[ns]

主要思想是将加权平均值计算为正常值,但有一些细微之处:

  • 您必须先将datetime64 [ns]转换为整数偏移量,因为这两种类型之间未定义乘法。然后你必须将其转换回来。
  • 将加权和计算为sum(a*w)/sum(w)将导致溢出(a*w太大而无法表示为8字节整数),因此必须将其计算为sum(a*(w/sum(w))

答案 1 :(得分:0)

准备示例数据框:

UPDATE mytable 
SET field1 = field1 - field1::date + '2015-12-31'::date
WHERE ...;

提取所需的平均时间戳值:

# Initiate dataframe
date_var = "date"
df = pd.DataFrame(data=[['A', '2018-08-05 17:06:01'],
                        ['A', '2018-08-05 17:06:02'],
                        ['A', '2018-08-05 17:06:03'],
                        ['B', '2018-08-05 17:06:07'],
                        ['B', '2018-08-05 17:06:09'],
                        ['B', '2018-08-05 17:06:11']],
                  columns=['column', date_var])

# Convert date-column to proper pandas Datetime-values/pd.Timestamps
df[date_var] = pd.to_datetime(df[date_var])
相关问题