如何使用 for 循环将第一次使用日期存储在字典中

Posted

技术标签:

【中文标题】如何使用 for 循环将第一次使用日期存储在字典中【英文标题】:How do I store the first use date in a dictionary using a for loop 【发布时间】:2019-10-09 13:30:47 【问题描述】:

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

Userid 开始使用日 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)  

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天 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 天

【问题讨论】:

找到每个 id 的最小起点? 1.似乎您的 else 分支中存在一些缩进问题。 2.您可以通过添加条件检查是否是最早日期,就像冒泡排序一样,为usedict 中的每个键(用户ID)分配值(日期时间) 【参考方案1】:

您可以通过以下方式实现您想要的。我只使用了您给出的示例中的 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

查看sort_valuesgroupby 了解更多详情。

【讨论】:

【参考方案2】:

我只查看两列,但您可以使用 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)

参考资料:

to_dict() 方法取自@jeff


输出:

【讨论】:

以上是关于如何使用 for 循环将第一次使用日期存储在字典中的主要内容,如果未能解决你的问题,请参考以下文章

在字典上循环 SQL 查询

如何使用 for 循环将列值添加到数据框字典中,以便每个数据框都有一个唯一的列?

如何将创建多个字典的 for 循环的输出加入/合并到一个大字典中

使用 for 循环遍历 Python 字典的 3 种方法 !

如何将for next循环中的日期放在excel的单元格中

如何在打开的 cv 中使用向量将一些浮点值存储在 for 循环中