我有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
答案 0 :(得分:1)
您可以使用DataFrames df1
和df2
执行与索引对齐的乘法。
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