2017-08-19 54 views
1

我有两个数据帧。第一个数据帧具有一年的能量,时间间隔为30分钟。第二个数据框是30分钟的一天价格数据。Python DataFrame乘以两个时间序列数据帧

我该如何乘以两个数据帧才能得到第二个数据帧被重复乘上第一个数据帧每日的结果?

非常感谢!

+0

为什么不DF2延伸到DF1的大小? – Wen

+2

向我们展示您的输入数据和所需输出数据的样本。 –

+1

欢迎来到SO!请查看以下内容,以便其他人可以更好地帮助您。 https://stackoverflow.com/questions/20109391/how-to-make-good-reproducible-pandas-examples – Alexander

回答

0

您可以按照时间和数量合并您的数据框,首先确保您的日期位于两个数据框的日期时间索引中。

MVCE:

df1 = pd.DataFrame({'kilowatts':np.random.randint(100,1000,(2*24*365))},index=pd.date_range('2016-01-01',periods=(2*24*365),freq='30T')) 
df2 = pd.DataFrame({'Dol_per_KW':np.random.rand(48)},index=pd.date_range('2016-01-01',periods = 48,freq='30T')) 

在每个数据帧创建日柱的时间来准备合并的关键。

df1['Time'] = df1.index.time 
df2['Time'] = df2.index.time 

合并和乘法:

df_out = df1.merge(df2, on='Time',right_index=True)\ 
      .eval('cost = kilowatts * Dol_per_KW', inplace=False)\ 
      .sort_index() 

让我们打印10:00至10:30,每天来验证。

print(df_out.loc[df_out.index.hour == 10].head(10)) 

输出:

     kilowatts  Time Dol_per_KW  cost 
2016-01-01 10:00:00  187 10:00:00 0.460365 86.088217 
2016-01-01 10:30:00  743 10:30:00 0.572282 425.205644 
2016-01-02 10:00:00  364 10:00:00 0.460365 167.572786 
2016-01-02 10:30:00  668 10:30:00 0.572282 382.284482 
2016-01-03 10:00:00  170 10:00:00 0.460365 78.262016 
2016-01-03 10:30:00  682 10:30:00 0.572282 390.296432 
2016-01-04 10:00:00  336 10:00:00 0.460365 154.682572 
2016-01-04 10:30:00  451 10:30:00 0.572282 258.099254 
2016-01-05 10:00:00  215 10:00:00 0.460365 98.978431 
2016-01-05 10:30:00  295 10:30:00 0.572282 168.823237 
+0

非常感谢你!它似乎也可以用DataFrame.mul来做到这一点? – user8486156