我有一个带日期的表和另一个有每周数据的表。我的周从星期二开始,第二个表的日期应该确定一周(基本上是在星期日之前的星期二是星期的开始;或者那个日期是那一周的例子日。)
如何将日期加入有关周的信息?
以下是设置:
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
,但我看不出那是怎么做的。
答案 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