Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用不同的datetime索引将2个数据帧的2列相乘_Python_Pandas_Dataframe - Fatal编程技术网

Python:使用不同的datetime索引将2个数据帧的2列相乘

Python:使用不同的datetime索引将2个数据帧的2列相乘,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧UsdBrlDSlice和indexesM。第一种为每日,索引为yyyy-mm-dd格式,第二种为每月,索引为yyy-mm格式 UsdBrlDSlice示例: USDBRL date 1994-01-03 331.2200 1994-01-04 336.4900 1994-01-05 341.8300 1994-01-06 347.2350 1994-01-07 352.7300 ...

我有两个数据帧
UsdBrlDSlice
indexesM
。第一种为每日,索引为
yyyy-mm-dd
格式,第二种为每月,索引为
yyy-mm
格式

UsdBrlDSlice
示例:

              USDBRL
date                
1994-01-03  331.2200
1994-01-04  336.4900
1994-01-05  341.8300
1994-01-06  347.2350
1994-01-07  352.7300
             ...
2020-10-05    5.6299
2020-10-06    5.5205
2020-10-07    5.6018
2020-10-08    5.6200
2020-10-09    5.5393
我需要在
UsdBrlDSlice
中插入一个新列,将其值
USDBRL
乘以
indexem['c']
中的特定列,但要匹配两个索引的正确月份

类似于excel的vlookup乘法。谢谢。

我解决了1)在第一个数据帧中创建一个新的
y-m
列,然后2)应用map()函数:

  • UsdBrlDSlice['y-m']=UsdBrlDSlice.index.to\u期间('m')

  • usdbrldsicle['new col']=usdbrldsicle['USDBRL']*usdbrldsicle['y-m'].map(indexesM.set_index(indexesM.index)['c'])


  • 请考虑对代码添加一些解释。
    UsdBrlDSliceTmp = UsdBrlDSlice.copy()
    UsdBrlDSliceTmp['date_col'] = UsdBrlDSliceTmp.index.values
    indexesMTmp = indexesM.copy()
    indexesMTmp['date_col'] = indexesMTmp.index.values
    UsdBrlDSliceTmp['month'] = UsdBrlDSliceTmp['date_col'].apply(lambda x: x.month)
    indexesMTmp['month'] = indexesMTmp['date_col'].apply(lambda x: x.month)
    
    UsdBrlDSliceTmp = UsdBrlDSliceTmp.merge(indexesMTmp, on='month', how='left')
    UsdBrlDSliceTmp['target'] = UsdBrlDSliceTmp['USDBRL']*UsdBrlDSliceTmp['c']
    UsdBrlDSlice['new_col'] = UsdBrlDSliceTmp['target']