【问题标题】:Average time between transactions or orders BY users in pandapanda 中用户的交易或订单平均时间
【发布时间】:2017-06-23 03:38:45
【问题描述】:

我有大约 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")["timestamp"].mean()

...但是这段代码只是出错了。

“DataError:没有要聚合的数字类型”

【问题讨论】:

    标签: python pandas dataframe timestamp


    【解决方案1】:

    我认为您首先需要boolean indexing 进行过滤,然后使用here 中的自定义lambda 函数groupbytimedeltas 转换为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()
    

    【讨论】:

    • 你能帮我理解 x-x.min() 在那里做什么吗?
    • 是的,它减去所有具有最小值的值,因此输出是一系列时间增量。然后转换为hours,在哪里可以找到mean
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多