基于时间数据帧的另一个数据帧的索引提取列信息 - 避免迭代
Extract column info based on index of another Data frame for time based Data frames - Avoid Iterating
我有 2 个按时间索引的数据帧。
import datetime as dt
import pandas as pd
rng1 = pd.date_range("11:00:00","11:00:30",freq="500ms")
df1 = pd.DataFrame({'A':range(1,62), 'B':range(1000,62000,1000)},index = rng)
rng2 = pd.date_range("11:00:03","11:01:03",freq="700ms")
df2 = pd.DataFrame({'Z':range(10,880,10)},index = rng2)
我正在尝试将 df1 中的 'C' 分配给 df2 中最接近 df1 时间索引的 'Z' 的最后一个元素。下面的代码现在似乎可以工作了(returns 一个列表)。
df1['C'] = None
for tidx,a,b,c in df1.itertuples():
df1['C'].loc[tidx] = df2[:tidx].tail(1).Z.values
#df1['C'].loc[tidx] = df2[:tidx].Z -->Was trying this which didn't work
df1
是否可以避免迭代
TIL:Pandas索引实例具有映射方法属性。
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.map.html
def fn(df):
def inner(dt):
return df.ix[abs(df.index - dt).argmin(), 'Z']
return inner
df1['C'] = df1.index.map(fn(df2))
我有 2 个按时间索引的数据帧。
import datetime as dt
import pandas as pd
rng1 = pd.date_range("11:00:00","11:00:30",freq="500ms")
df1 = pd.DataFrame({'A':range(1,62), 'B':range(1000,62000,1000)},index = rng)
rng2 = pd.date_range("11:00:03","11:01:03",freq="700ms")
df2 = pd.DataFrame({'Z':range(10,880,10)},index = rng2)
我正在尝试将 df1 中的 'C' 分配给 df2 中最接近 df1 时间索引的 'Z' 的最后一个元素。下面的代码现在似乎可以工作了(returns 一个列表)。
df1['C'] = None
for tidx,a,b,c in df1.itertuples():
df1['C'].loc[tidx] = df2[:tidx].tail(1).Z.values
#df1['C'].loc[tidx] = df2[:tidx].Z -->Was trying this which didn't work
df1
是否可以避免迭代
TIL:Pandas索引实例具有映射方法属性。
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.map.html
def fn(df):
def inner(dt):
return df.ix[abs(df.index - dt).argmin(), 'Z']
return inner
df1['C'] = df1.index.map(fn(df2))