如何在熊猫中加入约会日期范围?

时间:2016-02-11 13:03:29

标签: date pandas time-series

我有一个带日期的表和另一个有每周数据的表。我的周从星期二开始,第二个表的日期应该确定一周(基本上是在星期日之前的星期二是星期的开始;或者那个日期是那一周的例子日。)

如何将日期加入有关周的信息?

以下是设置:

from datetime import datetime as dt
import pandas as pd

df=pd.DataFrame([dt(2016,2,3), dt(2016,2,8), dt(2016,2,9), dt(2016,2,15)])

df_week=pd.DataFrame([(dt(2016,2,4),"a"), (dt(2016,2,11),"b")], columns=["week", "val"])
# note the actual start of the weeks are the Tuesdays: 2.2., 9.2.

# I expect a new column df["val"]=["a", "a", "b", "b"]

我看过大熊猫date_range,但我看不出那是怎么做的。

1 个答案:

答案 0 :(得分:1)

您正在寻找DatetimeIndex.asof

这将为您提供最接近df日期的索引:

df_week.set_index('week', inplace=True)
df_week.index.asof(df['day'][1])

您现在可以使用它来选择相应的值:

df_week.loc[df_week.index.asof(df['day'][1])]

最后,将其应用于整个数据框:

df = pd.DataFrame([dt(2016,2,8), dt(2016,2,9), dt(2016,2,15)], columns=['day'])
df['val'] = df.apply(lambda row: df_week.loc[df_week.index.asof(row['day'])]['val'], axis=1)

我从df删除了第一个值,因为我不想处理边缘情况。

结果:

         day val
0 2016-02-08   a
1 2016-02-09   a
2 2016-02-15   b