你一个实现这一目标,通过重新编制第二数据帧,使他们有相同的形状,然后使用数据框操作mul
:
创建日期时间序列两个数据帧。第二个只使用工作日来确保我们在两者之间存在差距。将日期设置为索引。
import pandas as pd
# first frame
rng1 = pd.date_range('1/1/2011', periods=90, freq='D')
df1 = pd.DataFrame({'value':range(1,91),'date':rng1})
df1.set_index('date', inplace =True)
# second frame with a business day date index
rng2 = pd.date_range('1/1/2011', periods=90, freq='B')
df2 = pd.DataFrame({'date':rng2})
df2['value_to_multiply'] = range(1-91)
df2.set_index('date', inplace =True)
重新索引与第一个索引的第二个帧。 Df1现在在非营业日期间会出现第一次有效观察。
# reindex the second dataframe to match the first
df2 =df2.reindex(index= df1.index, method = 'ffill')
通过DF1 [ 'value_to_multiply_by']多DF2:
# multiple filling nans with 1 to avoid propagating nans
# nans can still exists if there are no valid previous observations such as at the beginning of a dataframe
df1.mul(df2['value_to_multiply_by'].fillna(1), axis=0)
来源
2015-02-07 16:51:47
JAB
更新,以使其更易于理解 – JAB 2015-02-07 19:01:32
这是非常接近我所需要的,除了两件事情: 1.数据I在df1中有不恒定的,我需要填充NA与每个从前一行的值。 2.是否有一种方法可以进行多路转换? – MMM 2015-02-07 21:16:51
reindex有一个称为'方法'的参数,可以用来填补新索引中的空白。 ''填充''取最后一次有效的观察结果和''填充''下一个有效的观察结果。更新了代码以包含它。数据不一定是恒定的 - 这仅仅是一个例子。 – JAB 2015-02-07 21:31:09