pandas 如何知道人们需要为我提供的服务付费的时间

olqngx59  于 2023-01-24  发布在  其他
关注(0)|答案(2)|浏览(97)

我有包含ID、性别、价格、付款时间的数据。例如:

import pandas as pd
df1 = pd.DataFrame({'id': ['1','2','3','4','5','6','7','8'],
                    'gender': ['Male','Female','Male','Female','Male','Female','Male','Male'],
                    'price': [250, 1000,300, 250, 1000, 500, 450, 500],
                    'timeToPay':['0 days 01:20:00','1 days 03:24:02','0 days 12:45:55','0 days 05:38:20','0 days 02:44:12','0 days 11:25:38','1 days 01:11:00','0 days 05:22:00']})

支付时间是客户订购和支付之间的时间差(数据类型timedelta 64 [ns])。
我怎样才能得到最佳的支付时间范围,我的意思是,人们支付0-1小时或4-6小时或可能1天-2天。我想知道人们支付多长时间我提供的服务。
我尝试根据付款时间对数据进行分组,但我认为它没有给予我需要的信息

hgqdbh6s

hgqdbh6s1#

我会选择直方图。尝试不同的bin大小,这取决于你有多少行。
如果你需要在不同的服务上进行测量,你可能需要先与一个小组分开日期,然后再列出每个小组。
pandas.DataFrame.hist
你可以进一步计算平均值,这又取决于你的数据距离,所以基本上你需要先知道你的数据。

kzipqqlq

kzipqqlq2#

IIUC,
我修改了你的代码使之更容易复制。

import pandas as pd
df1 = pd.DataFrame({'id': ['1','2','3','4','5','6','7','8'],
                    'gender': ['Male','Female','Male','Female','Male','Female','Male','Male'],
                    'price': [250, 1000,300, 250, 1000, 500, 450, 500],
                    'timeToPay':[ '0 days 01:20:00'
                                 ,'1 days 03:24:02'
                                 ,'0 days 12:45:55'
                                 ,'0 days 05:38:20'
                                 ,'0 days 02:44:12'
                                 ,'0 days 11:25:38'
                                 ,'1 days 01:11:00'
                                 ,'0 days 05:22:00']})
df1['timeToPay']=df1['timeToPay'].apply(lambda x: pd.Timedelta(x))

现在timeToPay是一个timedelta,那么你可以用这个代码段把timeToPay转换成hourday

import math
df1['timeToPay_hour']=df1['timeToPay'].apply(lambda x: math.ceil(x.total_seconds()/(60*60)))
df1['timeToPay_day']=df1['timeToPay'].apply(lambda x: math.ceil(x.total_seconds()/(24*60*60)))

df1

现在,您的df1如下所示
| | 身份证|性别|价格|待付时间|待付时间_小时|待付时间_天|
| - ------|- ------|- ------|- ------|- ------|- ------|- ------|
| 无|1个|男性|二百五十|第0天01:20:00|第二章|1个|
| 1个|第二章|女性|一千|第1天03:24:02|二十八|第二章|
| 第二章|三个|男性|三百|第0天12:45:55|十三|1个|
| 三个|四个|女性|二百五十|第0天05:38:20|六个|1个|
| 四个|五个|男性|一千|0天02:44:12|三个|1个|
| 五个|六个|女性|五百|第0天11:25:38|十二|1个|
| 六个|七|男性|四百五十|第1天01:11:00|二十六|第二章|
| 七|八个|男性|五百|第0天05:22:00|六个|1个|
然后,你可以这样用timeToPay_hour来比较性别。

df1[['gender','timeToPay_hour']].hist(bins=5)

希望这能有所帮助。

相关问题