如果是同一年,则将列与另一列相乘

时间:2018-05-10 10:40:31

标签: python pandas

我有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

2 个答案:

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