首页 > 解决方案 > 如何使用 for 循环将第一次使用日期存储在字典中

问题描述

我有一个用户 ID 数据集以及他们使用特定通行证的所有时间。我需要找出他们每个人第一次使用通行证后的天数。我正在考虑遍历数据集并将第一次使用存储在字典中,然后从今天的日期减去它。我似乎无法让它工作。

Userid 开始使用 Day
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 星期五

这是数据集的一部分。日期格式为 Ymd

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)  

user_id use_count days_used Ave Daily Trips register_date days_since_reg
12 42 23 1.826087 NaT NaT
17 28 13 2.153846 NaT NaT
114 54 24 2.250000 2019-02-04 107 days
169 31 17 1.823529 NaT NaT
1414 49 20 2.450000 NaT NaT
1712 76 34 2.235294 NaT NaT
2388 24 12 2.000000 NaT NaT
6150 10 5 2.000000 2019-02-05 106 天

标签: pythonpandasdatetime

解决方案


我只看两列,但您可以使用 groupby 找到每个 id 的最小值,然后使用 apply 来获取差异(我已经做了几天的差异)

import pandas as pd
import datetime

user_id = [1712, 1712, 9050, 9050, 9050, 9409, 9683, 8800, 8800]
start = ['2019-01-04', '2019-01-05', '2019-01-04', '2019-01-04', '2019-01-06', '2019-01-05', '2019-05-20', '2019-05-17', '2019-05-17']

df = pd.DataFrame(list(zip(user_id, start)), columns = ['UserId', 'Start'])
df['Start']= pd.to_datetime(df['Start']) 
df = df.groupby('UserId')['Start'].agg([pd.np.min])
now = datetime.datetime.now()
df['days'] = df['amin'].apply(lambda x: (now - x).days)
a_dict = pd.Series(df.days.values,index = df.index).to_dict()
print(a_dict)

参考:

取自 @jeff 的 to_dict()方法


输出:

在此处输入图像描述


推荐阅读