基于时间数据帧的另一个数据帧的索引提取列信息 - 避免迭代

时间:2015-01-27 14:56:07

标签: python pandas

我有2个按时间索引的DataFrame。

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)

我正在尝试分配' C'在df1中,' Z'的最后一个元素在df2中,最接近时间指数df1。以下代码现在似乎可以正常工作(返回一个列表)。

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

是否可以避免迭代。

1 个答案:

答案 0 :(得分:0)

TIL:Pandas Index实例具有map方法属性。

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))