熊猫交易或订单BY用户之间的平均时间

时间:2017-02-06 08:51:55

标签: python pandas dataframe timestamp

我有大约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:没有要汇总的数字类型”

1 个答案:

答案 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()