我有一个看起来像这样的数据框
import random
import pandas as pd
import datetime
data = [[random.random(), random.random()] for i in range(9)]
index = pd.date_range(start=datetime.date(2019,1,1), end=datetime.date(2019,3,5), freq='W')
columns = ['col1', 'col2']
df = pd.DataFrame(data, index, columns)
那是
col1 col2
2019-01-06 0.027467 0.506598
2019-01-13 0.329616 0.558430
2019-01-20 0.850979 0.874664
2019-01-27 0.859704 0.168140
2019-02-03 0.399097 0.229954
2019-02-10 0.239516 0.626095
2019-02-17 0.450974 0.668491
2019-02-24 0.202464 0.434521
2019-03-03 0.337609 0.705639
我还有一本类似的字典
multipliers = {datetime.date(2019,1, 1): 4, datetime.date(2019,2,1): 5, datetime.date(2019,3, 1): 2}
我想做的是返回一个数据帧,其中两列中的两个条目都乘以multipliers
中对应于同一月份的值。如果数据框的日期与乘法器的日期相同,那么我可以执行df.mul(multipliers, axis=0)
,但这里不是这种情况。
完成此任务的最佳方法是什么?我可以使用for循环并比较截断后的日期,但这几乎可以肯定不是最快/最有效的方法。
或者,乘法器本身可以是数据框的形式。在我上面的示例中,实现此目的的一种简单方法是
df2 = pd.DataFrame(multipliers.values(), multipliers.keys(), columns=['mults'])
这将产生一个看起来像
的数据框 mults
2019-01-01 4
2019-02-01 5
2019-03-01 2
即使采用这种形式,我也不确定将这些数据帧相乘的好方法。