如何使用 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_values
和groupby
了解更多详情。
【讨论】:
【参考方案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 循环将第一次使用日期存储在字典中的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 for 循环将列值添加到数据框字典中,以便每个数据框都有一个唯一的列?
如何将创建多个字典的 for 循环的输出加入/合并到一个大字典中