我有 2 个列表:
vals = [1,2,3,4]
dates = [t1, t2, t3, t4]
其中日期采用 Python 的日期时间格式。
然后,给定另一组列表:
vals_2 = [1, 1, 2, 2]
dates_2 = [t5,t6,t7,t8]
可能是t6
= t1
等
现在,我想在日期匹配的地方添加 vals
和 vals_2
(所以添加 vals[i]
和 vals_2 [j]
如果 dates[i] == dates_2[j]
).
我想要一个有效的解决方案。
到目前为止我的想法: 将 vals 放入 Pandas 数据框中,然后将 vals_2 放入单独的数据框中,然后将两者合并到日期键上?
问题:这是一个好(/最好)的主意吗?考虑到日期时间格式等,我不确定如何处理这个问题,因此将不胜感激一些关于如何开始的指示
谢谢
最佳答案
按照您的建议:
import datetime as dt
vals = [1, 2, 3, 4]
dates = [dt.date(2016,1,n) for n in range(1, 5)]
vals_2 = [1, 1, 2, 2]
dates_2 = [dt.date(2016,1,n) for n in range(3, 7)]
df1 = pd.DataFrame({'date': dates, 'vals': vals})
df2 = pd.DataFrame({'date': dates_2, 'vals': vals_2})
>>> df1.merge(df2, on='date', suffixes=['_1', '_2'])
date vals_1 vals_2
0 2016-01-03 3 1
1 2016-01-04 4 1
你也可以将日期转换成时间戳,然后进行比较,这样应该会稍微快一些:
df1['date'] = pd.to_datetime(df1.date)
df2['date'] = pd.to_datetime(df2.date)
40k 条记录的计时
使用日期时间对象的 Pandas。
%timeit df1.merge(df2, on='date', suffixes=['_1', '_2'])
1 loops, best of 3: 10.2 s per loop
使用时间戳的 Pandas。
%timeit df1.merge(df2, on='date', suffixes=['_1', '_2'])
1 loops, best of 3: 9.1 s per loop
关于python - 添加日期匹配的列表元素 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36697373/