python - 如何使用 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 天
解决方案
我只看两列,但您可以使用 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()方法
输出:
推荐阅读
- c - 将 Waveshare 高精度 AD/DA 板 (ADS1256) 连接到 DE10-Nano 套件
- emq - 无法为 Java 启用 emqx_extension_hook
- google-apps-script - Google Script 代码永远运行 - 如何终止 - 不断调用 Urlfetch
- firebase - NoSuchMethodError:在 null 上调用了方法 'ref'
- c++ - C++20 中模板对非类型文字参数的部分特化:clang 和 gcc 不同意
- html - 比标题和导航更宽的 div
- java - Adc 转换量化
- caching - 不同级别缓存(即 L1、L2 和 L3)之间的缓存一致性(MESI 协议)
- angular - TS2339:类型“{}”上不存在属性“文本”
- elasticsearch - 检查项目是否已从数组中索引