Python 熊猫在群体内获得平均时间间隔
我有一个包含Python 熊猫在群体内获得平均时间间隔,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含EffectiveDate列的数据框。 我想按数据帧按键值分组,然后为EffectiveDate列计算每组中所有日期值的平均时间间隔 例如,对于数据帧: EffectiveDate 1 2015-08-17 07:00:00 1 2015-08-18 07:00:00 1 2015-08-19 07:00:00 2 2015-08-20 07:00:00 2 2015-08-21 07:00:00 2 2015-09-16 07:00:00 2 2
EffectiveDate
列的数据框。
我想按数据帧按键值分组,然后为EffectiveDate
列计算每组中所有日期值的平均时间间隔
例如,对于数据帧:
EffectiveDate
1 2015-08-17 07:00:00
1 2015-08-18 07:00:00
1 2015-08-19 07:00:00
2 2015-08-20 07:00:00
2 2015-08-21 07:00:00
2 2015-09-16 07:00:00
2 2015-10-15 07:00:00
2 2015-11-16 08:00:00
df.groupby('Key').agg({
'EffectiveDate': lambda x: x.diff().astype('timedelta64[s]').mean()
})
我想按索引分组并计算EffectiveDate列中日期值之间的平均间隔
15199 2015-08-17 07:00:00
15214 2015-08-18 07:00:00
15219 2015-08-19 07:00:00
15233 2015-08-20 07:00:00
15254 2015-08-21 07:00:00
15687 2015-09-16 07:00:00
199 2015-10-15 07:00:00
1123 2015-11-16 08:00:00
Name: EffectiveDate, dtype: datetime64[ns]
在单个系列上,这似乎效果不错:
EffectiveDate.diff().astype('timedelta64[s]').mean()
但是,当我在数据帧上使用与groupby聚合相同的函数时:
EffectiveDate
1 2015-08-17 07:00:00
1 2015-08-18 07:00:00
1 2015-08-19 07:00:00
2 2015-08-20 07:00:00
2 2015-08-21 07:00:00
2 2015-09-16 07:00:00
2 2015-10-15 07:00:00
2 2015-11-16 08:00:00
df.groupby('Key').agg({
'EffectiveDate': lambda x: x.diff().astype('timedelta64[s]').mean()
})
结果是
EffectiveDate
1 1970-01-01 00:00:00.016747425
2 1970-01-01 00:00:00.017765280
3 1970-01-01 00:00:00.034776096
4 1970-01-01 00:00:00.002052450
5 1970-01-01 00:00:00.018238800
6 1970-01-01 00:00:00.024005438
7 1970-01-01 00:00:00.012330000
我希望每列中都有一个整数字段。我正在使用Pandas0.19.2
似乎试图回溯到0.19.2
中EffectiveDate列的原始数据类型。我认为这通常是有道理的,因为我们希望列下面的聚合具有相同的数据类型
要解决此问题,您可以改为在0.19.2
中使用,它在以后不执行相同的强制转换
df.groupby(df.index).apply(
lambda x: x.diff().astype('timedelta64[s]').mean()
)
以前似乎不是这样,因为我只能在转换为EffectiveDate列的原始数据类型后,才能在0.18.1
中重现您的行为
在0.18.1
>>> df
EffectiveDate
1 2015-08-17 07:00:00
1 2015-08-18 07:00:00
1 2015-08-19 07:00:00
2 2015-08-20 07:00:00
2 2015-08-21 07:00:00
2 2015-09-16 07:00:00
2 2015-10-15 07:00:00
2 2015-11-16 08:00:00
>>> df.groupby(df.index).agg({
'EffectiveDate': lambda x: x.diff().astype('timedelta64[s]').mean()
})
EffectiveDate
1 86400.0
2 1901700.0
>>> df.groupby(df.index).agg({
'EffectiveDate': lambda x: x.diff().astype('timedelta64[s]').mean()
}).astype(df.EffectiveDate.dtype)
EffectiveDate
1 1970-01-01 00:00:00.000086400
2 1970-01-01 00:00:00.001901700
结果将是
键
列中每组的平均值,这似乎与您的输出不符。你能提供完整的数据框和你正在做的事情吗?还有,你正在使用什么版本的熊猫?我不能用0.18.1复制它。@Mitch你是对的。我无法在0.18.1中复制这一点,我使用的是0.19.2非常奇怪,嗯。如果到那时还没有人来,我明天就试着给你测试一下。