寻找一种比forloop更快的方法来搜索和附加带有Pandas的数据帧

2024-04-19 21:56:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为这个功能寻找一个更快的替代方案:

def add_weather_data(data, weather):
    w = pd.DataFrame()
    for date in data.date:
        w = w.append(weather.iloc[weather.index.get_loc(date, method='nearest')])
    return pd.concat([data, w.set_index(data.index)], axis=1)

具体来说,我有两个数据帧:data包含我的数据集以及一个名为date的列,其中填充了pd.Timestamp,而weather包含用DatetimeIndex索引的数据。对于data中的每一行,我希望搜索距离weatherdata.date最近的索引,并将weather中的那一行附加到data中的这一行(丢弃weather中的DatetimeIndex)。你知道吗

有没有一个更好的替代我的上述职能?我的方法似乎要花很长时间。。。谢谢!你知道吗


Tags: 数据in功能adddataframefordatadate
2条回答

简单的joining表格怎么样?你知道吗

但看起来你想要最近的约会。可以创建一个包含所有日期的表,并使用Pandasinterpolate函数来填充缺少的值。然后把它连接到原始数据帧?你知道吗

^{}method='nearest'一起使用

def add_weather_data(data, weather):
    w = weather.reindex(data.date, method='nearest')
    return pd.concat([data.set_index('date'), w], axis=1)

考虑示例数据帧dataweather

data = pd.DataFrame(dict(date=pd.date_range('2017-03-31', periods=5), A=range(5)))

tidx = pd.date_range('2017-03-01', '2017-04-05', freq='7H')
weather = pd.DataFrame(dict(B=range(len(tidx))), tidx)

那么

add_weather_data(data, weather)

            A    B
date              
2017-03-31  0  103
2017-04-01  1  106
2017-04-02  2  110
2017-04-03  3  113
2017-04-04  4  117

回复评论

def add_weather_data(data, weather):
    w = weather.reindex(data.date, method='nearest')
    return data.join(w, on='date')

相关问题 更多 >