Python Pandas - 使用第一个数据从第二个数据帧获取位置

时间:2015-05-18 22:09:36

标签: python pandas

Pandas的非常基本的用户,但我在这里撞墙。

所以我有一个名为dg的数据框有一个名为'user_id'的列,还有另外两个目前不需要的列。我还有两个数据帧(data_conv和data_retargeting),其中包含相同的列名和一个名为'timestamp'的列,但每个'user_id'有多个时间戳。

我需要在dg中为找到的最小和最大'timestamp'创建新列。

我目前能够通过iterrow行的一些非常冗长的方法来做到这一点但是对于~16000的数据帧,花了45分钟我想减少它因为我有更大的数据帧来运行这个。< / p>

    for index,row in dg.iterrows():
        user_id=row['pdp_id']
        n_audft=data_retargeting[data_retargeting.pdp_id == user_id].index.min()
        n_audlt=data_retargeting[data_retargeting.pdp_id == user_id].index.max()
        n_convft=data_conv[data_conv.pdp_id == user_id].index.min()
        n_convlt=data_conv[data_conv.pdp_id == user_id].index.max()      
        dg[index,'first_retargeting']=data_retargeting.loc[n_audft, 'raw_time']
        dg[index,'last_retargeting']=data_retargeting.loc[n_audlt, 'raw_time']
        dg[index,'first_conversion']=data_conv.loc[n_convft, 'raw_time']
        dg[index,'last_conversion']=data_conv.loc[n_convlt, 'raw_time']

1 个答案:

答案 0 :(得分:0)

没有进入特定代码,是否在data_conv和data_retargeting中找到了dg中的每个user_id?如果是这样,您可以先将它们合并(http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.merge.html)到新的数据框中,然后计算最大/最小值,然后提取所需的列。我怀疑可能会跑得快一点。