问题描述
我正在尝试对一个数据框进行特征工程,其时间增量以秒为单位。我想创建一个新功能,该功能可以让跨时间分布更均匀的数据得分更高。
我用 2 个时间线创建了这个示例 DF,一个是均匀分布的,而另一个不是:
df = pd.DataFrame({'id':[1,1,2,2],'timestamp':[
'2020-09-01 18:14:00','2020-09-01 18:14:01','2020-09-01 18:14:02','2020-09-01 18:14:03','2020-09-01 18:14:04','2020-09-01 19:14:05','2020-09-01 19:14:16','2020-09-01 19:14:18','2020-09-01 19:14:30','2020-09-01 19:14:59'
]})
df['timestamp'] = pd.to_datetime(df.timestamp)
df['delta'] = (df['timestamp']-df['timestamp'].shift()).fillna(pd.timedelta(seconds=0)).astype('int64') / 1000000000
我用谷歌搜索了一下,有点迷茫,标准偏差是要走的路吗?
解决方法
我只是想大声说:
for x in df['id'].unique():
print(x,df[df['id']==x]['timestamp'].diff().mean().total_seconds())
产生:
1 1.0
2 13.5
.median()
产生:
1 1.0
2 11.5
.std()
产生:
1 0.0
2 11.269427669
然后我会编写一个函数,该函数接收 means
的所有 medians
/ std
或 diff
并返回一个值,例如确定它是否密集打包与否取决于您的想法。
因此 13.5
/ 11.5
或 id
2
具有更高的平均值 / 均值 / 标准差,这意味着这些点在时间上的分布更为广泛。但是,检查每个 id
的行数是否相同很重要,我认为比较 2 行和 100 行是不明智的。
有趣的问题,我期待听到其他人的想法!