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

时间:2018-04-20 15:18:21

标签: python pandas

我有2个数据帧,一个是每月采样,另一个是每年采样。

我希望将月度数据框中的列中的值乘以年度数据框中的列的值(如果它是同一年)。我怎么能这样做?

df1 = pd.DataFrame({'column1' : [1, 1, 1, 2, 2]}, index=['2018 - 01', '2018 - 02', '2018 - 03', '2019 - 01', '2019 - 02'])
df1

           column1
2018 - 01        1
2018 - 02        1
2018 - 03        1
2019 - 01        2
2019 - 02        2

df2 = pd.DataFrame({'columnX' : [2, 3]}, index=['2018', '2019'])     
df2

      columnX
2018        2
2019        3

预期结果:

               column1
2018 - 01            2
2018 - 02            2
2018 - 03            2
2019 - 01            6
2019 - 02            6

3 个答案:

答案 0 :(得分:1)

您可以使用DataFrames df1df2执行与索引对齐的乘​​法。

df2.columns = df1.columns
df1['new'] = df1.set_index(df1.index.str.split(r'\s*-').str[0]).mul(df2).values

df1
           column1  new
2018 - 01        1    2
2018 - 02        1    2
2018 - 03        1    2
2019 - 01        2    6
2019 - 02        2    6

答案 1 :(得分:1)

您可以创建多个索引,然后执行mul(多个)

df1['mul']=df1.set_index(df1.index.str[:4],append=True).mul(df2.columnX,level=1,axis=0).values
df1
Out[123]: 
           column1  mul
2018 - 01        1    2
2018 - 02        1    2
2018 - 03        1    2
2019 - 01        2    6
2019 - 02        2    6

答案 2 :(得分:0)

一种方法是从df1中提取年份并通过df2['columnX']进行映射。

df1['column1'] *= df1.index.str.split(' - ').str[0].map(df2['columnX'].get)

结果:

print(df1)

           column1
2018 - 01        2
2018 - 02        2
2018 - 03        2
2019 - 01        6
2019 - 02        6