Python 如何使用for循环在字典中存储首次使用日期

Python 如何使用for循环在字典中存储首次使用日期,python,pandas,datetime,Python,Pandas,Datetime,我有一个userid的数据集,它们在使用某个特定过程的所有时候都会使用。我需要知道他们每个人第一次使用通行证已经有多少天了。我正在考虑运行数据集,将第一次使用的数据存储在字典中,并减去今天的日期。我似乎无法让它工作 用户ID开始使用日期 1712 2019-01-04星期五 1712 2019-01-05星期六 9050 2019-01-04星期五 9050 2019-01-04星期五 9050 2019-01-06星期日 9409 2019-01-05星期六 9683 2019-05-20星期

我有一个userid的数据集,它们在使用某个特定过程的所有时候都会使用。我需要知道他们每个人第一次使用通行证已经有多少天了。我正在考虑运行数据集,将第一次使用的数据存储在字典中,并减去今天的日期。我似乎无法让它工作

用户ID开始使用日期
1712 2019-01-04星期五
1712 2019-01-05星期六
9050 2019-01-04星期五
9050 2019-01-04星期五
9050 2019-01-06星期日
9409 2019-01-05星期六
9683 2019-05-20星期一
8800 2019-05-17星期五
8800 2019-05-17星期五

这是数据集的一部分。日期格式为Y-m-d

usedict={}  
keys = df.user_id  
values = df.start_date  
for i in keys:  
    if (usedict[i] == keys):  
      continue   
else:  
    usedict[i] = values[i]  
prints(usedict)  
用户\u id使用\u计数天数\u使用的平均每日行程登记\u日期天数\u自\u reg
12 42 23 1.826087 NaT NaT NaT
1728132.153846纳特纳特
114 54 24 2.250000 2019-02-04 107天
169 31 17 1.823529纳特纳特
1414 49 20 2.45万纳特纳特
171276342.235294 NaT NaT NaT
2388241220万纳特纳特

6150 10 5 2.000000 2019-02-05 106天

我只查看了两列,但您可以使用groupby找到每个id的最小值,然后使用apply获得差异(我已在天内完成差异)

参考文献:

to_dict()方法取自


输出:


我只查看了两列,但您可以使用groupby找到每个id的最小值,然后使用apply获得差异(我在几天内完成了差异)

参考文献:

to_dict()方法取自


输出:


您可以通过以下方法实现您想要的。在您给出的示例中,我只使用了2个用户ID,但这同样适用于所有用户

import pandas as pd
import datetime

df = pd.DataFrame([{'Userid':'1712','use_date':'2019-01-04'},
                    {'Userid':'1712','use_date':'2019-01-05'},
                    {'Userid':'9050','use_date':'2019-01-04'},
                    {'Userid':'9050','use_date':'2019-01-04'},
                    {'Userid':'9050','use_date':'2019-01-06'}])

df.use_date = pd.to_datetime(df.use_date).dt.date
group_df = df.sort_values(by='use_date').groupby('Userid', as_index=False).agg({'use_date':'first'}).rename(columns={'use_date':'first_use_date'})

group_df['diff_from_today'] = datetime.datetime.today().date() - group_df.first_use_date
输出为:

print(group_df)
  Userid first_use_date diff_from_today
0   1712     2019-01-04        139 days
1   9050     2019-01-04        139 days

查看和以了解更多详细信息。

您可以通过以下操作实现所需。在您给出的示例中,我只使用了2个用户ID,但这同样适用于所有用户

import pandas as pd
import datetime

df = pd.DataFrame([{'Userid':'1712','use_date':'2019-01-04'},
                    {'Userid':'1712','use_date':'2019-01-05'},
                    {'Userid':'9050','use_date':'2019-01-04'},
                    {'Userid':'9050','use_date':'2019-01-04'},
                    {'Userid':'9050','use_date':'2019-01-06'}])

df.use_date = pd.to_datetime(df.use_date).dt.date
group_df = df.sort_values(by='use_date').groupby('Userid', as_index=False).agg({'use_date':'first'}).rename(columns={'use_date':'first_use_date'})

group_df['diff_from_today'] = datetime.datetime.today().date() - group_df.first_use_date
输出为:

print(group_df)
  Userid first_use_date diff_from_today
0   1712     2019-01-04        139 days
1   9050     2019-01-04        139 days

查看和以了解更多详细信息。

查找每个id的最小开始时间?1。您的else分支中似乎存在缩进问题。2.通过添加一个条件检查,您可以为
usedict
中的每个键(userid)分配值(日期-时间),检查最早的日期是否与冒泡排序的作用相同找到每个id的最小开始日期?1。您的else分支中似乎存在缩进问题。2.您可以通过添加一个条件检查来为
usedict
中的每个键(userid)分配值(日期-时间),检查是否是最早的日期,就像气泡排序一样