我在计算时间戳的平均值方面遇到了麻烦。
我的数据框中有一些带有时间戳的值,我希望将值汇总为单个值,其中包含所有值的总和以及相应时间戳的加权平均值
我的意见是:
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
答案 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]
主要思想是将加权平均值计算为正常值,但有一些细微之处:
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])