我有大约200万行...我发现了一堆答案,可以得到总体平均时间 - 但我试图得到每个时间戳,每个用户的平均时间。也不是禁止状态必须= 1。
UID timestamp Not_banned
3 2013-05-02 08:42:44 1
2 2013-05-02 14:05:57 1
2 2013-05-02 17:36:51 1
所以输出就像
UID avg_btwn_txn
3 1.5
2 63.2
6 22.1
我试过了:
df.groupby( “UID”)[ “时间戳”]。意味着()
...但是这段代码只是出错了。
“DataError:没有要汇总的数字类型”
答案 0 :(得分:2)
我认为您需要先boolean indexing
进行过滤,然后groupby
使用来自here的自定义lambda函数(timedeltas
转换为hours
然后转换为timedelatas
已被删除):
df1 = df[df['Not_banned'] == 1]
.groupby('UID')
.Timestamp
.apply(lambda x: (x-x.min()).astype('m8[h]').mean())
.reset_index()
print (df1)
UID Timestamp
0 2 1.5
1 3 0.0
query
的另一个解决方案:
df1 = df.query("Not_banned == 1")
.groupby('UID').Timestamp
.apply(lambda x: (x-x.min()).astype('m8[h]').mean())
.reset_index()