我正在寻找更快的替代方案:
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)
详细说明,我有两个DataFrame:data
包含我的数据集以及一个名为date
的列,其中填充了pd.Timestamp
&#39},而weather
包含数据以DatetimeIndex
索引。对于data
中的每一行,我希望在data.date
中搜索距离weather
最近的索引,并将weather
中的该行追加到此data
行(丢弃DatetimeIndex
中的weather
。
上面的功能是否有更好的选择?我的方法似乎需要很长时间才能运行......谢谢!
答案 0 :(得分:2)
将pd.DataFrame.reindex
与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)
考虑示例数据框data
和weather
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')
答案 1 :(得分:0)
如何简单地joining表格呢?
但看起来你想要最近的约会。也许创建一个包含所有日期的表,并使用Pandas interpolate
函数填充缺失值。然后将其加入原始数据框?