我怎么能得到一个团体的平均日期?
import pandas as pd
import numpy as np
df = pd.DataFrame ({'ID' : ['foo', 'bar'] * 5,
'VAL' : pd.date_range(start='4/1/2012', periods=10)})
ID VAL
foo 2012-04-01 00:00:00
bar 2012-04-02 00:00:00
bar 2012-04-04 00:00:00
foo 2012-04-05 00:00:00
bar 2012-04-06 00:00:00
foo 2012-04-07 00:00:00
bar 2012-04-08 00:00:00
foo 2012-04-09 00:00:00
bar 2012-04-10 00:00:00想要的外卖:
bar 06/04/2012
foo 05/04/2012我怎么能这么做?
发布于 2014-06-20 21:02:44
只是另一种选择(将日期时间值视为int64,这是它们的存储方式,并返回):
In [11]: df['VAL'].astype('int64').groupby(df['ID']).mean().astype('datetime64[ns]')
Out[11]:
ID
bar 2012-04-06
foo 2012-04-05
dtype: datetime64[ns]由于我们在这里使用视图,这应该比应用更有效/更快.
正如Jeff指出的:这是在Master中修正的(所以是0.14.1):
df.groupby('ID').mean()应该“正常工作”。
发布于 2014-06-20 16:36:06
这需要时间的平均值,然后将开始日期加回来(这应该在0.14.1/master (即将到来)中更直接地工作,这时可以取timedelta64的平均值)。
In [10]: m = df['VAL'].min()
In [11]: df.groupby('ID')['VAL'].apply(lambda x: (x-m).mean())+m
Out[11]:
ID
bar 0 2012-04-06
foo 0 2012-04-05
dtype: datetime64[ns]发布于 2014-06-20 16:16:17
可能有更有效的方法,但一种方法是转换为序号,取平均值,并将其转换回日期时间。
In [264]: df['VAL_ordinal'] = df['VAL'].apply(lambda x: x.toordinal())
In [267]: df.groupby('ID')['VAL_ordinal'].mean().apply(lambda x: datetime.fromordinal(int(x)))
Out[267]:
ID
bar 2012-04-06
foo 2012-04-05
Name: VAL_ordinal, dtype: datetime64[ns]https://stackoverflow.com/questions/24328834
复制相似问题