我有2个数据帧,一个是每月采样,另一个是每年采样的日期时间索引。
我希望将月度数据框中的列中的值乘以年度数据框中的列的值(如果它是同一年)。我怎么能这样做?
非常感谢你的帮助,
df = pd.DataFrame({'column1' : [1, 1, 1, 2, 2]}, index=['2018-01-01', '2018-01-02', '2018-01-03', '2019-01-03', '2019-01-02'])
df.index= pd.to_datetime(df.index)
df
column1
2018-01-01 1
2018-01-02 1
2018-01-03 1
2019-01-03 2
2019-01-02 2
df2 = pd.DataFrame({'columnX' : [2, 3]}, index=['2018', '2019'])
df2.index= pd.to_datetime(df2.index)
df2
columnX
2018-01-01 2
2019-01-01 3
预期结果:
df
Column1 Results
2018-01-01 1 2
2018-01-02 1 2
2018-01-03 1 2
2019-01-03 2 6
2019-01-02 2 6
答案 0 :(得分:2)
这是使用numpy
的替代解决方案:
s = df2.assign(x=df2.index.year).set_index('x')['columnX']
df['Result'] = np.vectorize(s.get)(df.index.year) * df['column1'].values
print(df)
column1 Result
2018-01-01 1 2
2018-01-02 1 2
2018-01-03 1 2
2019-01-03 2 6
2019-01-02 2 6
答案 1 :(得分:1)
另一种方法:
df2.index = df2.index.map(lambda x: x.year)
df['Result'] = df.apply(lambda y: y['column1'] * df2['columnX'][y.name.year], axis=1)