Python 通过条件查找timedelta列的平均值
我很难得到timedelta列的平均值 我的数据如下所示:Python 通过条件查找timedelta列的平均值,python,pandas,group-by,transform,timedelta,Python,Pandas,Group By,Transform,Timedelta,我很难得到timedelta列的平均值 我的数据如下所示: user date Flag Value 0 ron 12/23/2016 'flag' 0 days 10:08:00 1 ron 12/21/2016 'n/a' 0 days 08:00:00 2 ron 12/23/2016 'flag' 0 days 10:08
user date Flag Value
0 ron 12/23/2016 'flag' 0 days 10:08:00
1 ron 12/21/2016 'n/a' 0 days 08:00:00
2 ron 12/23/2016 'flag' 0 days 10:08:00
3 ron 12/21/2016 'n/a' 0 days 02:00:00
4 andy 12/22/2016 'flag' 0 days 10:00:00
5 andy 12/22/2016 'flag' 0 days 10:00:00
user date Flag Value Avg
0 ron 12/23/2016 'flag' 0 days 10:08:00 0 days 10:08:00
1 ron 12/21/2016 'n/a' 0 days 08:00:00 0 days 10:08:00
2 ron 12/23/2016 'flag' 0 days 10:08:00 0 days 10:08:00
3 ron 12/21/2016 'n/a' 0 days 02:00:00 0 days 10:08:00
4 andy 12/22/2016 'flag' 0 days 10:00:00 0 days 10:00:00
5 andy 12/22/2016 'flag' 0 days 10:00:00 0 days 10:00:00
我想通过基于Flag==Flag获取每个用户的平均值来生成一个Avg列。因此,数据如下所示:
user date Flag Value
0 ron 12/23/2016 'flag' 0 days 10:08:00
1 ron 12/21/2016 'n/a' 0 days 08:00:00
2 ron 12/23/2016 'flag' 0 days 10:08:00
3 ron 12/21/2016 'n/a' 0 days 02:00:00
4 andy 12/22/2016 'flag' 0 days 10:00:00
5 andy 12/22/2016 'flag' 0 days 10:00:00
user date Flag Value Avg
0 ron 12/23/2016 'flag' 0 days 10:08:00 0 days 10:08:00
1 ron 12/21/2016 'n/a' 0 days 08:00:00 0 days 10:08:00
2 ron 12/23/2016 'flag' 0 days 10:08:00 0 days 10:08:00
3 ron 12/21/2016 'n/a' 0 days 02:00:00 0 days 10:08:00
4 andy 12/22/2016 'flag' 0 days 10:00:00 0 days 10:00:00
5 andy 12/22/2016 'flag' 0 days 10:00:00 0 days 10:00:00
我有一个产生数据错误的代码:
sample.loc[:,'Value'] = pd.to_timedelta(sample['Value'])
sample.loc[:,'Avg'] = sample['user'].map(sample[sample['Flag']=='flag'].groupby('user')['Value'].mean())
但这是我得到的错误:
DataError: No numeric types to aggregate
我不知道当我将值转换为timedelta时为什么会这样说。感谢您的指导 这里有不同的问题
df['mean'] = pd.to_timedelta(df.loc[df['Flag'] == "'flag'", 'Value']
.astype('int64').astype('float64')
.reindex(df.index).groupby(df['user'])
.transform('mean'))
它给出:
user date Flag Value mean
0 ron 2016-12-23 'flag' 10:08:00 10:08:00
1 ron 2016-12-21 'n/a' 08:00:00 10:08:00
2 ron 2016-12-23 'flag' 10:08:00 10:08:00
3 ron 2016-12-21 'n/a' 02:00:00 10:08:00
4 andy 2016-12-22 'flag' 10:00:00 10:00:00
5 andy 2016-12-22 'flag' 10:00:00 10:00:00
注:以上假设值的数据类型为timedelta64[ns]
(pd.Timedelta
)。如果没有,则必须首先使用以下命令将其转换为Timedelta:
df['Value'] = pd.to_timedelta(df['Value'])
这回答了你的问题吗?试试这个:如果在值列中存在NAT值,我怎么能考虑呢?不确定这是不是正确的评论方式,但是我发现如果我加上“DROPNA.”(Acthype)(“It64”),非常感谢你花时间。