我有两个数据帧如下所示
t1 = pd.DataFrame({'person_id':[1,2,3],'observation_date':[np.nan,np.nan,np.nan],'observation_datetime':[np.nan,np.nan,np.nan]})
t2 = pd.DataFrame({'person_id':[1,2,3],'value_as_string':['5/28/2007','5/30/2007','6/4/2007']}).set_index('person_id')['value_as_string']
它们如下所示
这就是我试图得到的结果
t1['observation_date'] = t1['person_id'].map(t2)
t1['observation_date'] = pd.to_datetime(t1['observation_date'])
t1['observation_datetime'] = pd.to_datetime(t1['observation_date']).dt.strftime('%m/%d/%Y %H:%M:%S')
虽然这样做很好,但在实际数据中需要花费大量时间
请注意,我正在尝试对大小为100万记录的t1
数据帧和大小为15k记录的t2
数据帧执行此操作。所以任何有效的方法都是有用的
我希望我的输出数据帧如下所示
转换为datetime格式也需要很多时间,可以通过显式指定datetime格式作为
pd.to_datetime
的参数来加快转换速度。它可以让你的情况提高10倍。你知道吗模拟你的案子。你知道吗
在google colab上运行的测试结果:
因为t2很小,所以在映射之前将t2转换为datetime是有意义的,这样可以获得较小的加速。你知道吗
希望有帮助!你知道吗
合并方法
连接方法
dict地图法
无dict的Map方法
所以呢
我有办法解决你的问题。为什么不使用一种更快的方法来代替映射,比如在pandas中使用merge?我在近一百万张唱片上用过它,速度惊人。你知道吗
合并过程从两个数据帧开始。试着做
这将在两个数据帧(t1和t2)的两个列上对person\ id进行内部联接。您将在结果数据帧中引入一个新列。然后可以使用简单的列操作来填充目标列中的值。你知道吗
希望有帮助。你知道吗
相关问题 更多 >
编程相关推荐