日期截断后乘以熊猫数据框和字典

时间:2020-03-06 16:53:38

标签: python-3.x pandas

我有一个看起来像这样的数据框

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

即使采用这种形式,我也不确定将这些数据帧相乘的好方法。

0 个答案:

没有答案